我有这个查询:
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
这应该从另一个表中获取分配给客户的元素,我看到可以做到这一点的唯一方法是通过将客户详细信息“注入(inject)”元素,返回元素,但我想限制客户返回但允许无限元素,但是,这限制了元素而不是客户,这在我的情况下不起作用。
这可能吗?我错过了什么吗?
最佳答案
解决该问题的一种方法是对客户进行子查询并提取您需要的号码。像这样的东西:
from (select c.*
from customers c
limit 100
) c
但是,就您而言,您需要进行大量二次过滤(使用连接条件和位置)。相反,向每行添加一个客户计数器,并使用它来选择一定数量的客户:
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;
关于mysql - 限制一个表的结果数量,但允许另一个表的结果数量无限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21415643/