2009-07-13 10 views
-1

J'ai une table avec des données hebdomadaires qui ressemble à:requête MySQL pour obtenir non données pour les dates non attribuées

userID  Site    date 
------  ------   ------ 
Smith Ferris Wheel  2009-07-13 
Jones Outerspaceland  2009-07-13 
LChar Ferris Wheel  2009-07-14 
Smith  Underworld  2009-07-16 
Jones  Fish Bowl   2009-07-17 
Munson Go-Go Tech  2009-07-16 

Actuellement, j'ai un script PHP qui obtient d'abord la plage de dates (lundi - vendredi), puis une requête pour chaque ID utilisateur pour cette plage de dates. Ensuite, je parcours les résultats et je vérifie les écarts entre les dates. S'il y a un écart, il affiche la date et le site est répertorié comme "Rester à la maison". Il doit tenir compte plusieurs jours d'affilée (comme si l'utilisateur n'est stationné que le lundi et le vendredi de la semaine), et il doit faire un pas supplémentaire à la fin de chaque semaine pour s'assurer que l'utilisateur reste à la maison après Mercredi (ayant ainsi jeudi et vendredi à combler comme lacunes). Il y a donc trois vérifications à faire, une pour les utilisateurs ne commençant pas le lundi, une pour les intervalles entre les jours, et une pour les utilisateurs se terminant avant le vendredi ... plus elle doit tenir compte des jours d'affilée pour n'importe laquelle de ces situations.

Le script crée essentiellement un tableau de la plage de dates à vérifier, et il a bien fonctionné pendant des mois.

Je me demandais, y at-il une fonction MySQL pour avoir des jours de congé retournés pour chaque utilisateur? Pour que je puisse le faire remplir "Stay Home" dans la requête et ne pas avoir à exécuter un script funky qui prend une éternité à expliquer à d'autres personnes travaillant avec moi sur mon script?

Merci!

Répondre

0

Facile! Retournez la requête!

C'est:

  1. Créer une table de consultation avec les jours de la semaine
  2. Sculpt une requête qui effectue une LEFT_OUTER_JOIN sur la table de consultation et votre table DAYNAME (champ). Autrement dit, il retournera toutes les lignes de la table de consultation et seulement ceux qui correspondent à votre table ,,,

Je ne sais pas si vous voulez filtrer par personne .. les critères ressembleraient userid = « personne » ou userid est nulle

les données résultantes sembleront être ...

  1. cONSÉCUTIVE pour tous les jours
  2. Dans la ligne, UserIDs existeront pour Jours non vierges et être nulle pour les jours sautés
+0

Si j'ai une table qui est juste lundi - dimanche que je pourrais réutiliser encore et encore, y a-t-il une fonction de date qui, basée sur la plage de dates réelle, inversera ces jours de semaine en dates réelles? Un de mes objectifs est d'avoir autant, sinon tout, mon html réel retourné par la requête SQL en utilisant concat et autres joyeusetés, donc en utilisant votre idée fait l'affaire pour trouver des jours manquants, il serait idéal si elle renvoyait les jours de la semaine manquants que les dates manquantes (enveloppé dans les balises html etc). – Anthony

+0

Oui, il est possible d'obtenir les deux. Votre tableau contient-il seulement une semaine de données? Inclure dans la requête une colonne calculée effectuant un calcul de date basé sur la date de début (que vous transmettez). Il existe également l'option de UNION sur une petite table avec des dates et des groupes pour supprimer les doublons. – CMB

+0

SI par une valeur de données d'une semaine, vous voulez dire que la table n'a que des données pour une semaine spécifique, non. Si vous voulez dire, c'est seulement chaque requête pour une semaine de données, généralement, mais pas toujours, donc pas encore.Je pense que je devrais aller avec la suggestion de Joel d'avoir une table de dates à la place. Je préférerais avoir une table plus légère de seulement 7 valeurs, mais il semble que pour vraiment obtenir tout ce que je veux sans le luxe des tables temporaires, je vais devoir avoir une table de valeur 365 * 20 avec seulement chaque jour de l'année . – Anthony