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

标签 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

这应该从另一个表中获取分配给客户的元素,我看到可以做到这一点的唯一方法是通过将客户详细信息“注入(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/

相关文章:

php - 私有(private)收件箱中发件人和收件人的不同背景颜色

python - MySQL 和 web2py

mysql - 如何将值插入包含空格的 MySQL 表

mysql - 清除 phpMyAdmin MySQL 数据库中保存的查询

mysql - 无法使用 Node.js 连接到 mysql (express)

javascript - 根据下拉框值统计MySql数据

sql - 有没有办法从 MySQL 的正则表达式中提取子匹配项?

mysql - 视觉基础 2005 和 MySQL

MySQl,无法从Java向表中插入数据

MySQL语句选择特定列的最新条目