Mysql 从联接表中仅获取3行
我试图从联接表中仅获取三行。 例如,我有一个categories表。我想在不使用SQL内部循环的情况下从这些类别中获得流行类别和3篇文章。职位总数应为12 我试过了,但没用。如果我设置限制1,它就可以工作。但不在限制3上工作Mysql 从联接表中仅获取3行,mysql,sql,Mysql,Sql,我试图从联接表中仅获取三行。 例如,我有一个categories表。我想在不使用SQL内部循环的情况下从这些类别中获得流行类别和3篇文章。职位总数应为12 我试过了,但没用。如果我设置限制1,它就可以工作。但不在限制3上工作 您的子查询返回多条记录,实际上是3,因此应将相等运算符替换为IN运算符 考虑: SELECT categories.name AS cname, categories.url AS curl, articles.name, article
您的子查询返回多条记录,实际上是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'
在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 = 1
将您的语法JOIN articles ON articles.id=替换为JOIN articles ON articles.id IN not worked for me:/可能重复我在phpmyadmin:1235中遇到的错误-此版本的MySQL尚不支持“LIMIT&IN/ALL/ANY/SOME subquery”@Cihan:您使用的是哪个版本的MySQL?
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 = 1