【问题标题】:Mysql display random 4 users with more than 5 articlesmysql随机显示4个用户超过5篇文章
【发布时间】:2018-02-17 19:53:02
【问题描述】:

我有用户表和文章表。文章表包含用户提交的文章。我正在研究一个 sql 查询来显示超过 5 篇文章的随机 4 个用户。 user_id 存储在文章表中。尽管有一些类似的问题,但我在 stackoverflow 和 google 中进行了搜索,但我找不到任何特定于我的问题。

任何人都可以让我知道这个问题之前是否已经回答过,如果是,请给我一个链接,否则我有以下查询:

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。

希望这是有道理的。

问候

【问题讨论】:

  • 你能提供一张图片可以使用的表格吗
  • 您的示例显示SELECT * FROM users WHERE type = 3 ...,但是您显示的架构没有表users 的名为type 的列。您能否发布您的架构的准确描述,并按照@scaisEdge 的要求提供示例数据。

标签: php mysql


【解决方案1】:

我已经模拟了一些表格数据来测试我的查询。 WHERE 子句必须位于 JOINs 之后。你对COUNT和5的比较也有点模棱两可——如果你想要5个以上,那么>5,如果你想要5个或更多,那么>=5。

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

【讨论】:

    【解决方案2】:

    您在哪里加入并处于错误的位置,您错过了 group by 以获得正确的功能 你需要一个 rand 和 limit 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
    

    【讨论】:

    • 我认为应该是“按 rand() 排序”。它不返回任何结果。
    • 显示正确的数据样本和预期的..结果..如果不返回结果也取决于数据......
    • 以表格格式显示适当的数据样本..以及预期结果的简历..我们需要一个有效的数据集来优化查询+
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多