MySql:限制用户在选择查询结果中出现的时间

时间:2019-04-30 00:13:35

标签: mysql

我在这里迷路了:)

我需要限制用户出现在选择查询结果中的次数。

让我们考虑一下这两个表:

user
+------------+-----------+----------+---------------------+
| user_id    | firstname | lastname |    max_articles     |
+------------+-----------+----------+---------------------+
| u01        | Yusuf     | Shakeel  |         2           |
| u02        | John      | Doe      |         6           |
| u03        | Jane      | Doe      |         4           |
+------------+-----------+----------+---------------------+

articles
+------------+-----------+-----------+
| article_id | user_id   | content   |
+------------+-----------+-----------+
| art01      | u01       | BláBláBlá |
| art02      | u01       | BláBláBlá |
| art03      | u03       | BláBláBlá |
| art04      | u03       | BláBláBlá |
| art05      | u02       | BláBláBlá |
| art06      | u01       | BláBláBlá |
+------------+-----------+-----------+

在用户表中,每个用户可以看到的文章数最多。

所以当我这样做时:

SELECT * FROM articles

它将列出所有文章。如您所见,用户u01有3篇文章,但根据用户表信息它只能出现2篇文章。

我需要选择所有文章,但根据user.max_articles

来限制每个用户的文章数。

这可能吗?我该如何解决?

我希望我能够解释我的意思。 我正在使用MySql。

非常感谢大家。

P.S。 -我编辑了几乎所有内容。谢谢。

编辑

select查询应考虑两个表。像这样:

SELECT articles.* FROM articles
LEFT JOIN user ON user.user_id = articles.user_id

因此,应该如何计算每个用户列出的结果并将其与user.max_articles进行比较。如果为> =,它将继续列出该用户以外的结果-在列出时应为每个用户执行此操作。

这怎么办?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

尝试一下,让我知道结果是否接近您要实现的目标:

SELECT articles.user_id,
       -- 1st operation 
       COUNT(ARTICLE_ID) AS op1, 
       -- 2nd operation
       MAX(ARTICLE_ID) AS op2, 
       -- 3rd operation
       IF(COUNT(ARTICLE_ID) >= MAX_ARTICLES, COUNT(ARTICLE_ID),'') AS op3, 
       MAX_ARTICLES
          FROM articles 
          LEFT JOIN USER ON user.user_id = articles.user_id 
 GROUP BY USER.USER_ID;