限制一个表的结果量,但允许另一个表无限

时间:2014-01-28 20:03:07

标签: mysql

我有这个问题:

SELECT *, m.id AS mooringid
                    FROM mooring m JOIN customer c ON m.assignedTo = c.id
                    WHERE m.Number = :var OR (CONCAT(c.TitleName,' ',c.Surname) LIKE CONCAT('%', :var, '%')) OR m.MooringArea = :var
                    ORDER BY c.Surname limit 0,250

这应该是从另一个表中获取分配给客户的元素,我看到我能做到这一点的唯一方法是通过“元素”输入客户详细信息,返回元素但我想限制金额客户返回但允许无限元素,但是,这限制了元素而不是客户,并且在我的情况下不起作用。

这可能吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是对客户执行子查询并提取所需的数字。类似的东西:

from (select c.*
      from customers c
      limit 100
     ) c

但是,在你的情况下,你有很多二次过滤(连接条件和where)。相反,在每行添加一个客户计数器,并使用它来选择一定数量的客户:

select t.*
from (SELECT *, m.id AS mooringid,
             @rn := if(@cid = c.id, @rn + 1, 1) as rn,
             @cid = c.id
      FROM mooring m JOIN
           customer c
           ON m.assignedTo = c.id cross join
           (select @rn := 0, @cid := -1) const
      WHERE m.Number = :var OR
            (CONCAT(c.TitleName,' ',c.Surname) LIKE CONCAT('%', :var, '%')) OR
            m.MooringArea = :var
      ORDER BY c.Surname
     ) t
order by c.SurName
where rn <= 10;