2010-11-11 28 views
1

j'ai une requête SQL imbriqué:Aide conversion SQL imbriqué sous-requête pour joindre la requête pour MySQL 4.0 compatibilité

SELECT DISTINCT(topic_id) 
FROM bb_posts 
WHERE topic_id NOT IN ( 
    SELECT topic_id FROM bb_posts 
    WHERE poster_id = $user_id AND post_status = 0) 
ORDER BY post_time DESC 

Mon serveur web fonctionne MySQL 4.0 qui ne marche pas autoriser les requêtes imbriquées. Est-ce que certains gourous SQL peuvent suggérer la même requête en utilisant le jargon JOIN? J'ai essayé et essayé et essayé ... mais je ne peux pas comprendre cela. Se sentir bête

Répondre

2

En supposant que topic_id n'est pas annulable, vous pouvez le faire:

SELECT DISTINCT(T1.topic_id) 
FROM bb_posts As T1 
    Left Join bb_posts As T2 
     On T2.topic_id = T1.topic_id 
      And T2.poster_id = $user_id 
      And T2.post_status = 0 
Where T2.topic_id Is Null 
ORDER BY T1.post_time DESC 
+0

YESSS !!!! Merci Thomas! – pierlo

1

Je ne suis pas tout à fait sûr de ce que votre exigence est mais en regardant votre requête, je pense que cela devrait suffire.

SELECT DISTINCT(topic_id) 
FROM bb_posts 
WHERE poster_id <> $user_id OR post_status <> 0 
ORDER BY post_time DESC 
+0

Cela ne devrait-il pas être 'posterid <> $ user_id Ou post_status <> 0'? – Thomas

+0

Les exigences sont essentiellement: je veux avoir une liste de sujets auxquels l'utilisateur n'a pas répondu ou a commencé lui-même. Chaque sujet a au moins un ou plusieurs messages avec un topic_id et un user_id. Votre réponse retournera également les messages auxquels l'utilisateur a répondu. – pierlo

+0

Oui Thomas, tu as raison. Edited ma réponse. Je suppose que d'essayer d'être rapide sur le pistolet a forcé une erreur. : P – pavanred