2010-10-12 7 views
0

Comment puis-je ajouter l'exemple de code suivant 1 à l'exemple 2 sans déranger ma requête?Problème de requête MySQL

Exemple 1

INNER JOIN users ON users_articles.user_id = users.user_id 

Exemple 2.

SELECT users.* 
FROM users_articles 
INNER JOIN articles_comments ON users_articles.id = articles_comments.article_id 
INNER JOIN users ON articles_comments.user_id = users.user_id 
WHERE users.active IS NULL 
AND users.deletion = 0 
ORDER BY articles_comments.date_created DESC 
LIMIT 50 

Répondre

0

Si je vous comprends bien, vous voulez rejoindre la table users deux fois, une fois pour les commentaires, et une fois pour les articles? Dans ce cas, vous devez alias la table. J'utilise habituellement des alias à une ou deux lettres pour la brièveté même si je ne double pas les tables, mais ce n'est pas important.

SELECT ... 
FROM users_articles UA 
INNER JOIN articles_comments AC ON UA.id = AC.article_id 
INNER JOIN users UC ON AC.user_id = UC.user_id 
    AND UC.active IS NULL 
    AND UC.deletion = 0 
INNER JOIN users UA ON UA.user_id = users.user_id 
    AND UA.active IS NULL 
    AND UA.deletion = 0 
ORDER BY AC.date_created DESC 
LIMIT 50 

BTW, Ne pas utiliser SELECT *, il est presque toujours préférable de lister précisément ce que vous voulez.

Avis de non-responsabilité: J'ai peut-être mal compris ce que vous essayez de faire; poster un peu de contexte à votre code est généralement une bonne idée. Dans ce cas, les noms des tables m'ont un peu ébranlé (si c'est ce que je pense, je suis juste parti avec users, articles et comments).

+0

Je ne veux pas afficher les articles et ses commets où 'users.deletion = 1' – HELP

+0

Je peux toujours le faire fonctionner :( – HELP

+0

Pourquoi ça ne marche pas? Que fait-il? Que voulez-vous qu'il fasse Le code ci-dessus devrait également rejeter les utilisateurs supprimés, donc je ne reçois pas vraiment votre commentaire à ce sujet, soit – Amadan