我试图从连接表中只获取三行。例如,我有一个类别表。我想从这些类别中获得流行的类别和3篇文章,而不使用SQL inside循环。帖子总数应为12。
我试过了,但不起作用。(如果我设置了limit 1,它就能正常工作。但不能在limit 3上工作)
SELECT
categories.name AS cname,
categories.url AS curl,
articles.name,
articles.url,
articles.image
FROM
categories
JOIN articles ON articles.id = (
SELECT p.id
FROM articles AS p
WHERE categories.id = p.category AND p.delete = '0'
ORDER BY p.id DESC
LIMIT 3
)
WHERE
categories.delete = '0'
AND categories.popular = '1'发布于 2019-09-02 18:45:28
您的子查询返回多条记录(实际上是3条),因此等式操作符应该替换为IN操作符。
考虑一下:
SELECT
categories.name AS cname,
categories.url AS curl,
articles.name,
articles.url,
articles.image
FROM
categories
JOIN articles ON articles.id IN (
SELECT p.id
FROM articles AS p
WHERE categories.id = p.category AND p.delete = '0'
ORDER BY p.id DESC
LIMIT 3
)
WHERE
categories.delete = '0'
AND categories.popular = '1'发布于 2019-09-02 19:22:00
在MySQL 8+中,您只需执行以下操作:
SELECT c.name AS cname, c.url AS curl,
a.name, a.url, a.image
FROM categories c JOIN
(SELECT a.*,
ROW_NUMBER() OVER (PARTITION BY a.category ORDER BY a.id DESC) as seqnum
FROM articles a
WHERE a.delete = 0
) a
ON a.category = c.id
WHERE a.seqnum <= 3 AND
c.delete = 0 AND
c.popular = 1https://stackoverflow.com/questions/57755540
复制相似问题