我有用户表和文章表。文章表包含用户提交的文章。我正在进行一个SQL查询,以显示超过5篇文章的随机4位用户。 user_id存储在articles表中。我已经在stackoverflow和谷歌搜索了,即使有一些类似的问题,我找不到任何特定的东西。
如果以前已经回答了这个问题,有人可以告诉我,如果是,请给我一个链接,否则我有以下疑问:
SELECT *
FROM users WHERE type = 3
INNER JOIN articles ON
users.user_id = articles.user_id HAVING COUNT(user_id) > 5
这似乎不起作用。我将非常感谢您帮助改进此查询。
数据库表如下:
USERS:
user_id
username
email
type
ARTICLES:
id
user_id
title
例如,总用户数为100.具有user_id 49的用户具有10篇文章,而具有user_id 50的另一用户具有20篇文章而其余用户具有少于5篇文章。因此查询应该只返回用户49和50。
希望这是有道理的。
问候
答案 0 :(得分:0)
你有加入并处于错误位置的地方,你错过了小组的正确运作 你需要一个rand和限制4的订单
SELECT u.user_id
FROM users u
INNER JOIN articles a ON u.user_id = a.user_id
WHERE a.type = 3
group by u.user_id
HAVING COUNT(a.user_id)>= 5
order by rand() limit 4
答案 1 :(得分:0)
我已经模拟了一些表数据来测试我的查询。 WHERE
条款必须在JOIN
之后定位。您对COUNT
和5
的比较也有点模棱两可 - 如果您想要超过5,那么>5
,如果您想要5个或更多,那么>=5
。< / p>
SQL:(SQLFiddle Demo)
SELECT a.user_id,a.username,COUNT(b.user_id)
FROM users a
INNER JOIN articles b ON a.user_id=b.user_id
WHERE a.type=3
GROUP BY a.user_id
HAVING COUNT(b.user_id)>5
ORDER BY RAND()
LIMIT 4