假设您有 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/