[MySQL] Jointure : Afficher autre chose si pas de résultat?

Jointure : Afficher autre chose si pas de résultat? [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-12-2009 à 22:02:07    

Bonjour,  
 
Je travaille sous MySQL et je me pose une question... J'utilise cette requête:  
 

Code :
  1. $forums = "SELECT
  2.     f.*,
  3.     t.*
  4.     FROM categories f, topics t
  5.     WHERE f.type = ".$type."
  6.     AND f.parent = ".$category."
  7.     AND f.statut = 1
  8.     AND t.id = f.last_topic
  9.     AND t.statut = 1";


 
Or mon souci est que certains forums n'ont pas de last_topic_id, donc ne sont pas retournés par cette requête... Pour l'instant j'ai bidouillé un truc genre "Si last_topic_id = 1, ca veut dire qu'il n'y a pas de message", en mettant la valeur par default à 1 pour etre sur d'avoir un last_topic_id.  
J'avais auparavant utilisé ceci :  
 

Code :
  1. SELECT
  2.     f.*,
  3.     t.*
  4.     FROM categories f, topics t
  5.     WHERE f.type = ".$type."
  6.     AND f.parent = ".$category."
  7.     AND f.status = 1
  8.     AND ((t.id = f.last_topic AND t.statut = 1) OR t.id = 1)


 
Vous pouvez donc voir le bidouillage, ca ressort 1. Mais bref, cette requête fonctionne, mais a un temps d'éxécution de 2.5 s en moyenne. Un EXPLAIN m'a montré qu'il parcourait tous les topics, sans utiliser d'index... Alors que la requête précédente va directement au topic.  
 
Une idée pour que la requête du haut me retourne quand même les résultats sans topic associé, pour que je puisse afficher la catégories, mais en mettant "pas encore de topic ici" avec une charge décente?  
 
Merci ! :)


---------------
Hello hello super jello
Reply

Marsh Posté le 18-12-2009 à 22:02:07   

Reply

Marsh Posté le 18-12-2009 à 23:00:33    

FROM categorie f LEFT JOIn topics t ON t.id = f.last_topic


---------------

Reply

Marsh Posté le 19-12-2009 à 09:31:59    

Coucou,  
 
Merci beaucoup, je m'approche :) !  
 
La left join fonctionne nickel, mais sans condition sur le topic... Je veux juste rajouter pour le topic AND t.statut = 1 (quand il existe)
 
Si je le rajoute après le WHERE, ça me les enlève encore vu que t.statut != 1.  
 
Une idée?  
 
Merci  :hello:


---------------
Hello hello super jello
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed