我有这样的查询:

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/

10-13 07:37
查看更多