Nouveau sujet Répondre Imprimer Syndication RSS 2.0

un truc pour requete SQL

VIP
Avatar de flash666
  • Messages : 2006
  • Inscrit : 01 Février 2005
  Lien vers ce message 03 Mai 2005, 9:12
une trouvaille je n'avais jamais utilisé la clause IF dans une requete My SQL


IF(exp1,exp2,exp3) => si exp1 est vrai -> exp2 sinon exp3

utilisation :

Si après un LEFT JOIN vous avez un champ qui prend une valeur = null vous pouvez l'enlever comme suit.

supponsons que votre requete soit :

SELECT s.sujet_id , s.forum_id, s.dernier_message_temps as dernier_msg,
ml.dernier_message_lu
FROM fsb_sujets s
LEFT JOIN fsb_messages_lus ml
ON s.sujet_id = ml.sujet_id AND ml.membre_id = '1'
WHERE s.dernier_message_temps > '1114500000'
GROUP BY s.sujet_id


le champ dernier_message_lu sera null si aucun enregistrement est trouvé dans la table messages_lus

pour eviter cela ecrire

SELECT s.sujet_id , s.forum_id, s.dernier_message_temps as dernier_msg,
IF(ml.dernier_message_lu,ml.dernier_message_lu,0) as dernier_message_lu
FROM fsb_sujets s
LEFT JOIN fsb_messages_lus ml
ON s.sujet_id = ml.sujet_id AND ml.membre_id = '1'
WHERE s.dernier_message_temps > '1114500000'
GROUP BY s.sujet_id


et comme par miracle les null sont transformés en zéro


ne remets pas à demain ce que tu peux faire faire aujourd'hui par un autre
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14556
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 05 Mai 2005, 15:35
Pas mal en effet ;) Il y a un gain de temps sinon ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
VIP
Avatar de flash666
  • Messages : 2006
  • Inscrit : 01 Février 2005
  Lien vers ce message 05 Mai 2005, 19:18
j'ai pas mesuré pour le moment


ne remets pas à demain ce que tu peux faire faire aujourd'hui par un autre
 
Répondre


.