php - 连接 MySQL 时限制结果

标签 php mysql

假设您有 2 个表,例如 tbCostumers 和 tbOrders。 我想显示包含所有客户、相关订单的摘要列表,并使用分页器显示它们。

进行连接后,我可以提取客户列表以及每个客户的所有订单,结果类似于:

idCostumer | name | ... | idProduct | productName | price | ...

如果客户有超过 1 个订单,则前 n 列全部相等。这样我就可以:

1 | will | ... | 12 | product1 | 123 | ...
2 | bill | ... | 23 | product2 | 321 | ... 
2 | bill | ... | 24 | product3 | 231 | ...

等等

我正在尝试使用LIMIT仅提取n条记录并将它们与分页器一起使用。

第一个问题:如果客户有超过 1 个订单,通过此查询,我将看到 n 条记录,第一列中相等(id、姓名、...和其他客户信息),但最后不同,其中有产品信息。它是否正确'?还有其他方法可以提取这些信息吗?

第二个问题:如果我这样做并使用LIMIT,我可以在代表同一客户的 2 个(或更多)记录之间“剪切”结果表;因此,例如在上面的小表中,如果我限制为 2,则第三行将会丢失,即使它是上面行的一部分,因为只是同一客户的另一个订单。

我想限制不同 idCostumer 的数量,以便恰好获取 n 个顾客,即使他们在结果表中出现超过 1 次。类似 n 个不同的 idCostumer,无论它们是否重复。

这可能吗?

我希望它很清楚,解释我想要实现的目标并不容易:)

谢谢!

最佳答案

你可能想要这样的东西:

SELECT * FROM (
  (SELECT * FROM tbCustomers LIMIT 3) AS c
  INNER JOIN tbOrders AS o ON o.customer = c.idcustomer 
);

您可以用命名列替换第一个星号,并且仅按照您喜欢的顺序接收所需的列(即:SELECT c.name, o.price FROM...)。

希望这对您有用!

编辑:更改 LIMIT 子句的值当然会更改所选客户的数量。

编辑 2:正如 Alvaro 指出的那样,您可能需要在 tbCustomers 查询中使用 order 子句。

关于php - 连接 MySQL 时限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32758484/

相关文章:

php - Codeigniter 验证库在 session 中存储错误

mysql - 使用sql查询删除表中的最后一行?

php - php中这两种构造函数注入(inject)有什么区别?

php - 加入同一个表?

pipe - 使用 proc_open() 加载 .profile

php - 查询密集型网站中的查询日志记录场景

php - mySQL 查询返回具有重复字段的结果?

c# - 显示来自 mysql 的选定行。 ( GridView )

mysql - DBUnit DatabaseSequenceFilter 是否适用于 MySQL?

java - 使用配置部署 WAR 文件