连接MySQL

时间:2015-09-24 09:59:01

标签: 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,name,...和其他客户信息)但最后不同,哪里有产品信息。这是正确的吗?有没有其他方法来提取这些信息?

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

我想限制不同的idCostumer的数量,以便准确地服用n个costumers,即使它们在结果表中出现的次数超过1次。有点像n不同的idCostumer,无论它们是否重复。

这可能吗?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

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子句。