2010-03-23 2 views
0

J'ai la requête suivanteremplissage Mysql dans les dates manquantes

SELECT * 
FROM attend 
RIGHT OUTER JOIN noattend ON attend.date = noattend.date2 
WHERE attend.date 
BETWEEN '2010-02-01' 
AND '2010-04-01' 
AND attend.customerid =1 
ORDER BY date DESC 
LIMIT 0 , 30 

Attend est la table avec customerid noattend est la table avec une ligne pour chaque date (date2) J'ai suivi les conseils donnés dans d'autres questions à extérieur droit rejoignez-le pour créer des valeurs où il n'y a pas d'enregistrement mais il ne remplit toujours pas les vides toute aide très appréciée

Répondre

0

Si vous dites que noattend est un tableau avec une ligne pour chaque date, vous devriez l'utiliser dans la clause WHERE:

WHERE noattend.date2 BETWEEN (..... 

Et je pense qu'il est plus clair d'utiliser LEFT JOIN:

SELECT * 
FROM noattend 
LEFT OUTER JOIN attend ON (attend.date = noattend.date2 AND attend.customerid =1) 
WHERE noattend.date2 
BETWEEN '2010-02-01' 
AND '2010-04-01' 
ORDER BY date DESC 
LIMIT 0 , 30 
+0

merci j'ai essayé ce que vous suggérez, mais il semble se tirer en quelques lignes supplémentaires null (je pense que les lignes nulles sont très bien tant il y a la date là-bas) avec le mien et 30 avec le vôtre. Des idées? – bsandrabr

+0

maintenant je me sens bête pourrait aider si je pris la clause limite – bsandrabr

0

Vous devez vous débarrasser du SELECT * et la liste de vos noms de colonnes à la place. Utilisez la zone noattend.date2 et non pas le paramètre.date. Attend.date sera NULL (vide) pour les lignes supplémentaires créées pour remplir vos dates "manquantes".

Quelque chose comme: Je suis 25

SELECT attend.id, attend.name, noattend.date2 
FROM . . . (continue your code here) 
+0

bon point merci aussi le dernier bit a dû être commandé par date2 desc – bsandrabr

Questions connexes