2010-10-12 4 views
0

Как добавить следующий пример кода 1 в пример 2 без испортить мой запрос.Проблема с запросом MySQL

Пример 1

INNER JOIN users ON users_articles.user_id = users.user_id 

Пример 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 

ответ

0

Если я вас правильно понял, вы хотите присоединиться к таблице users дважды, один раз для комментариев, и один раз для статей? В этом случае вам нужно добавить псевдоним таблицы. Я обычно использую одно- или двухбуквенные псевдонимы для краткости, даже если я не дублирую таблицы, но это не важно.

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 

КСТАТИ Не используйте SELECT *, это почти всегда лучше перечислять конкретно то, что вы хотите.

Отказ от ответственности: Возможно, я неправильно понял, что вы пытаетесь сделать; размещение небольшого контекста для вашего кода обычно является хорошей идеей. В этом случае имена таблиц немного подбросили меня (если это так, я думаю, что я только что ушел с users, articles и comments).

+0

Я не хочу отображать статьи и их кометы, где 'users.deletion = 1' – HELP

+0

Я все еще могу заставить его работать :( – HELP

+0

Почему он не работает? Что он делает? Что вы хотите сделать? • Код выше должен также отклонять удаленных пользователей, поэтому я не совсем получаю ваш комментарий об этом. – Amadan