J'ai besoin d'aide pour récupérer l'enregistrement de la base de données avec une certaine condition, car j'explique ci-dessous: -
Je dois vérifier la disponibilité des étudiants pour chaque mois entre le démarrage sélectionné et la date de fin. P>
Structure de table : - P>
Données de table: - p>
5 Réponses :
J'ai trouvé votre question comme celle-ci s'il y a un certain nombre d'élèves et qu'ils peuvent s'inscrire à tout moment dans le mois, cela n'est pas pris en compte, mais si vous pouvez décider que cela comparera à une date de démarrage ou deddate cette requête vous aidera certainement à vous aider. .
SELECT count(*) as cnt,CONCAT(MONTH(startDate),'/', YEAR(startDate)) as day from notes group by day
Oui, cela aidera quelque peu, mais où est l'autre record du mois?
Par exemple, je n'ai pas d'entrée pour le 05/2016, alors il retournera 0 pour ce mois-ci.
Pouvez-vous m'aider à cela? @khajaamin
Supprimer l'année () fonction de Concat si vous n'avez pas besoin ou d'expliquer ce qui est un cas d'utilisation réel.
Vous devez utiliser une sous-requête ou une jointure auto pour obtenir les résultats requis, voir Exemple ci-dessous: sortie (sur la base des enregistrements présentés dans la capture d'écran): P> +---------+---------+-----------------+
| startMY | endMY | balanceCapacity |
+---------+---------+-----------------+
| 2015-12 | 2017-07 | 19 |
| 2016-03 | 2017-04 | 18 |
| 2016-05 | 2017-03 | 17 |
+---------+---------+-----------------+
Mais toujours avec votre réponse, vous ne pouvez pas obtenir le résultat pour le mois qui n'ont aucun enregistrement.
@Harshsanghanghani Je ne pense pas que MySQL va vous chercher des dates qui n'existe pas dans la table de base de données, mais vous pouvez facilement vérifier la date dans la liste s'il n'existe pas Balancecapacity = 20 code>
J'ai besoin d'aide pour cette question uniquement autrement, je peux également obtenir le résultat pour le résultat existant, BTW merci beaucoup pour votre aide.
@HARSHSANGHANI GRAND, vous pouvez poster une réponse alors (sinon existe), il serait utile pour les futurs visiteurs.
On dirait qu'il y a quelques personnes ici avec des solutions qui vous donneront des résultats pendant des mois qui ne sont pas entièrement libres (s'ils sont entièrement libres, aucune ligne n'est retournée).
Une bonne solution serait de renvoyer les chiffres occupé pour chaque mois, dans votre code, créez une liste de mois dans la gamme que vous vous souciez et soustrayez les résultats de votre requête à partir de la valeur «entièrement libre» de la valeur correspondante par défaut du mois. P>
mais si c'est Vraiment important que vous fassiez cela purement dans MySQL pour une raison quelconque, il n'y a pas de moyen général de dire «Donnez-moi une liste de valeurs dans une gamme donnée», mais si vous n'êtes pas opposé à la construction d'une liste de mois, vous vous souciez d'exécuter avant d'exécuter La requête, vous pouvez probablement le faire avec une relevé syndicale grand et une jointure gauche, par exemple: p> etc .. ce qui précède devra être fortement modifié pour corriger la colonne ambiguë noms etc et ajouter dans la logique afin que tous les rendez-vous étudiant chevauchant une année et un mois donnés sont inclus dans les comptes et il comptait correctement ... le Autres réponses déjà faites cela, je ne me dérangerai pas de le refaire :) p> Juste une pensée sur une éventuelle approche, ce qui précède n'est pas destiné à être pris directement comme une réponse. P> P> P> >
Pour cette question, une petite démo a été mise en place.
Basé sur vos captures d'écran de base de données
p>
exemple de schéma de table, de données et de requêtes p> Cette requête vous obtiendra les sièges restants disponibles Dans chaque classe basée sur votre Vous pouvez vérifier l'exemple de résultats dans SQL Fiddle P> p> mois code> et année code> paires. p>
Vous devez utiliser PHP pour obtenir le compte pour chaque mois de la plage, SQL seul ne retournera pas les données dont vous avez besoin (facilement).
Utilisez SQL pour retourner un ensemble de résultats contenant tous les étudiants qui ont commencé avant votre gamme. Ou s'est terminé après votre plage. P>
supposer que votre gamme de requêtes commence par Ensuite, utilisez PHP pour déterminer le nombre de sièges pris pendant chaque mois de votre gamme. p> essentiellement en boucle à travers chaque mois de la gamme et comptez tous les étudiants inscrits à ce mois ou avant ce mois et dont l'inscription n'avait pas terminé avant ce mois. P> ci-dessous , Je peuploie un tableau appelé supposer Après cette boucle, impression d'impression Les informations souhaitées sont une matière triviale: p> désolé, je n'ai pas le temps Pour le tester, il pourrait donc y avoir une faute de frappe ou quelque chose que j'ai négligé, mais j'espère que cela vous indique dans une bonne direction ..! P> P> $ fratDate code> et se termine par $ todate p> $ INCRollmentbymonth CODE> qui tiendra le nombre de numéros d'élèves stockés par [année] [mois] code> puis il suffit de les soustraire de la capacité de la pièce et stockage dans $ openseates [année] [mois] [mois] code> p> $ résultat code> est un tableau de lignes renvoyées de la base de données: p>
Comment
05/2016 - 15 code>? Il n'y a que trois entrées indiquées dans la capture d'écranCeci est juste un exemple @kamalpal