我有这样的查询:
SELECT
p.title,
a.title
FROM
pages p
LEFT JOIN
articles_pages ap on ap.p_id = p.id
LEFT JOIN
articles a ON a.id = p.a_id
WHERE
[...]
LIMIT 10
如何限制每页仅3条文章?
最佳答案
有几种方法可以做到这一点。您可以使用子查询,但我不建议这样做,因为它较慢且不可扩展。所以..我喜欢下面给你看的那个:
我将创建一个变量并将其保存在行号(@num)上。
我们还需要另一个变量来保存“页面” ID,以便在出现另一个页面时重新启动行计数。
最终,我们通过@num筛选出所需的行数。请记住matchNO是一个计算字段,因此您不能在where陈述中进行过滤,而应使用have。
set @num := 0, @page := 0;
SELECT p.title, a.title,IF(@page = p.id,@num:=@num+1,@num:=1) as matchNO,@page:=p.id
FROM pages p
LEFT JOIN articles_pages ap on ap.p_id = p.id
LEFT JOIN articles a ON a.id = p.a_id
WHERE [...]
having matchNO <= 3
LIMIT 10
行号是确定您所在的行所必需的。
page变量告诉您最后一行的页面,以便您可以进行比较,然后在需要时将@num再次设置为1。
希望对您有所帮助
关于mysql - MYSQL如何限制联接的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42511344/