我在这里迷路了:)
我需要限制用户出现在选择查询结果中的次数。
让我们考虑一下这两个表:
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进行比较。如果为> =,它将继续列出该用户以外的结果-在列出时应为每个用户执行此操作。
这怎么办?
非常感谢您。
答案 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;