我想从两个表中选择每个类别的最后 3 条新闻
first table ' Categories ' & ' news '
类别表
ID_CAT | NAME | PRIORITE
新闻表
ID | ID_CAT | TITLE | THE_NEWS
我尝试在这个 SQL 代码中做限制,但它只给了我所有类别的最后 3 个新闻
SELECT C.PRIORITE, N.*
FROM categories C, news N
WHERE N.ID_CAT=C.ID_CAT
AND C.PRIORITE >1
ORDER BY N.ID DESC
LIMIT 3
我尝试获取所有具有 PRIORITE > 1
的新闻(优先级是类别的顺序)所以,我想从每个优先级中获取 3 个最新消息。
示例:
Priorite 2 = get last 3 news
Priorite 3 = get last 3 news
...等等
我在互联网上搜索了一些,但对我没有任何帮助,有什么解决办法吗?或者我是否需要创建另一个函数来从每个类别中获取新闻,并在其参数中发送 ID?
最佳答案
你可以得到 n 不。通过使用相关子查询对每个类别的新闻
SELECT *
FROM news n
JOIN categories c ON c.id = n.category_id
WHERE c.priority > 1
AND (
SELECT COUNT(*)
FROM news
WHERE n.category_id = category_id
AND n.id <= id
) <= 3;
或者,如果您使用的是 Mysql 8,那么您可以使用 window functions与 common table expressions喜欢
WITH cte AS(
SELECT *,
RANK() OVER (PARTITION BY category_id ORDER BY id DESC ) rnk
FROM news
ORDER BY id
)
SELECT *
FROM cte n
JOIN categories c ON c.id = n.category_id
WHERE c.priority > 1
AND rnk <= 3;
关于php - 从每个类别中选择最近 3 条新闻 - 两个表 - (MySQL - PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391702/