2010-01-25 4 views
1

Мне нужно получить некоторые данные, которые, если это возможно, должны выполняться в одном запросе - если толчок наступает, я всегда могу написать некоторую логику PHP, чтобы сделать это пополам, но я думаю, что можно было бы сделать это в один запрос. Я не знаю, как!MySQL-SUM несколько COUNT?

Вот что я хочу сделать:

Сформировать список, который отображает общее количество сообщений от автора. Поэтому у меня есть COUNT три разных столбца из трех разных таблиц (reviewsID FROM reviews, featuresID FROM features & newsID FROM news), а затем SUM их вместе, чтобы обеспечить общую цифру. Они должны быть ограничены WHERE userID = THE_ID, чтобы иметь одного пользователя.

В то же время, я хочу получить более простой запрос, который получит пару вещей о нем из базы данных - userRealName and userLevel.

SELECT userRealName, userLevel FROM user WHERE (userLevel = 'a' OR userLevel = 'e' OR userLevel ='r') 

Финальный стол должен выглядеть примерно так:

*userRealName*userLevel*articles* 
|------------|---------|--------| 
|The user |e  |87  | 
|Another user|r  |34  | 

Возможно ли это?

ответ

1

Это очень трудно сделать без MySQL здесь, чтобы проверить это, но я думаю, что что-то подобное будет работать:

SELECT u.userRealName, u.userLevel, COUNT(t.articleID) 
FROM user u, 
(
    SELECT userID, reviewsID articleID FROM reviews 
    UNION ALL 
    SELECT userID, featuresID articleID FROM features 
    UNION ALL 
    SELECT userID, newsID articleID FROM news 
) t 
WHERE u.userID = t.userID 
    AND (u.userLevel = 'a' OR u.userLevel = 'e' OR u.userLevel ='r') 
GROUP BY u.userRealName, u.userLevel 
+0

Спасибо. Мне не нужен THE_ID, я хотел бы иметь общее количество сообщений для всех авторов определенного уровня. Вы также пропустили пару бит. Но спасибо за очень быстрый ответ! – different

+0

Хорошо, избавился от этой части предложения WHERE. Рад, что у вас все получилось - не удивительно, что его нужно было немного подкорректировать, так как это было от головы. –

Смежные вопросы