Php 限制连接MySQL的结果

Php 限制连接MySQL的结果,php,mysql,Php,Mysql,假设你有两张桌子,例如TBCustomers和tbOrders。 我想显示一个包含所有客户、相关订单的摘要列表,并用分页器显示它们 通过加入,我可以提取客户列表和每个客户的所有订单,结果如下: idCostumer | name | ... | idProduct | productName | price | ... 其中,如果客户的订单超过1,则前n列都相等。因此,我可以: 1 | will | ... | 12 | product1 | 123 | ... 2 | bill | ...

假设你有两张桌子,例如TBCustomers和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条记录,并将它们与分页器一起使用

第一个问题:如果一个客户有一个以上的订单,通过这个查询,我将看到n条记录,在第一列(id、名称……和其他客户信息)中相等,但在末尾不同,其中有产品信息。这是‘正确’吗?还有其他方法提取这些信息吗

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

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

这可能吗

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


谢谢大家!

您可能想要这样的东西:

SELECT * FROM (
  (SELECT * FROM tbCustomers LIMIT 3) AS c
  INNER JOIN tbOrders AS o ON o.customer = c.idcustomer 
);
您可以将第一个星号替换为命名列,并仅按您喜欢的顺序接收所需列(即:选择c.name、o.price FROM…)

希望这对你有用

编辑:更改限制条款的值当然会更改选定客户的数量


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

可能最简单的方法是使用聚合函数(例如GROUP_CONCAT)汇总订单详细信息,这样每个客户就有一个输出行。然后,您可以在php中拆分订单详细信息,并将其显示在您的(可变长度)页面上。请注意,
LIMIT
without
orderby
将返回任意数据(甚至不是随机数据)。