2011-12-20 2 views
1

у меня есть tbl_user, который содержит информацию о пользователе, и у меня есть tbl_article, который содержит статьи + идентификатор tbl_userРодитель Упорядоченные по числу дочерних таблиц

У нас есть родитель-потомок отношения, потому что каждый у пользователя может быть много статей, поэтому я включил user_id в таблицу статей.

Я хотел бы указать 10 пользователей, которые имеют большинство статей ... Я искал везде, хотя я не мог его найти ... Я думал об этом, но напрасно, я не хорошо в SQL-запросах.

Спасибо заранее

+2

Какие СУБД являются вы используете? Что, если есть связь за 10-е место? –

+0

Я просто использую mySQL с PHP ... речь идет о веб-проекте – SmootQ

ответ

3
SELECT TOP(10) 
    tbl_user.id, 
    COUNT(tbl_article.user_id) 
FROM 
    tbl_user 
LEFT JOIN 
    tbl_article 
    ON tbl_user.id = tbl_article.user_id 
GROUP BY 
    tbl_user.id 
ORDER BY 
    COUNT(tbl_article.user_id) DESC 
LIMIT 
    10 

В зависимости от RDBMS вы используете, вам может понадобиться TOP(10) или LIMIT 10 и т.д. Я включил и, таким образом Вы можете видеть, но использовать только один, который используется РСУБД;)

+0

Спасибо, друг ... +1, я уже получил его, если только есть возможность выбрать два лучших ответа;) – SmootQ

+0

@SimoTAQI - Awwwwww, у меня была версия «LIMIT» первая;) У вас есть то, что вы нужно, однако, вот что имеет значение. Не мое чувство тщеславия. Или нужна внешняя похвала и оправдание. Мое существо не зависит от голосов и очков в StackOverflow. *** cry *** – MatBailie

+0

hhhhh, Тогда я проведу первый разговор между вами двумя :-) Хорошо, лучший ответ :-) – SmootQ

2
SELECT TOP 10 
    UserID, COUNT(Article) 
FROM tbl_User u 
INNER JOIN tbl_Article a 
    ON a.Userid = u.userid 
GROUP BY userid 
ORDER BY COUNT(article) DESC 

Все, что вам нужно, это GROUP BY и JOIN.

Если у пользователей есть 0 статей, которые вы хотите включить, вы должны использовать LEFT JOIN.

Возможно, вы также можете указать COUNT(DISTINCT Article), если есть проблема с дубликатами.

+0

Спасибо большое друг ... +1, я попробую это :-) – SmootQ

+1

Если в одном из 10 лучших есть 0 статей, t включить его;) – MatBailie

+1

Если у них есть 0 статей, то они не должны включаться, я предполагаю, так как будет бесконечная связь со всеми другими пользователями без каких-либо статей. – JNK

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