【发布时间】:2013-07-16 17:34:39
【问题描述】:
我在我的网络应用程序上遇到了一个(我想是)ORDER BY 问题。没有其他问题/答案似乎与我的相同,或者我不能适用于我的问题。我会尽量用一个可以解决我的问题的简单案例来解释自己。
想象 3 个表格,“Customers”、“Address”和“CustomersAddress”。
**Customers**
id, name, surname
1, "John", "Willis"
2, "Sarah", "Davies"
3, "Mark", "Jones"
4, "Linda", "Ede"
**Address**
id_dir, address
1, "some adress"
2, "other address"
3, "holliday address"
4, "my other house address"
5, "Flat in the beach address"
**CustomersAdress**
id_ca, id_customer, id_address
1, 1, 4
2, 2, 4
3, 3, 1
4, 1, 2
5, 2, 2
6, 4, 5
7, 4, 3
很明显,CustomersAdress 是一个将客户与他们拥有的地址相关联的表。
通过简单的 INNER JOIN,我可以得到如下所有关系:
SELECT id_customer, surname, name, id_dir, address
FROM CustomersAddress
INNER JOIN Customers ON Customers.id=CustomerAddress.id_customer
INNER JOIN Address ON Address.id_dir=CustomerAddress.id_address
有了这些,我可以用 ORDER BY 订购,例如,如下
ORDER BY surname
甚至
ORDER BY surname, id_dir / ORDER BY surname, id_dir
使用“ORDER BY id_dir, surname”的例子我会得到:
idcustomer, surname, name, id_dir, address
3, "Jones", "Mark", 1, "some address"
2, "Davies", "Sarah", 2, "other address"
1, "Willis", "John", 2, "other address"
4, "Ede", "Linda" 3, "holliday address"
2, "Davies", "Sarah", 4, "my other house address"
1, "Willis", "John", 4, "my other house address"
4, "Ede", "Linda", 5, "Flat in the beach address"
直到这里没有什么新鲜事。但我想要做的是嵌套订单(不知道如何命名)订单将是与地址相关的姓氏和拥有该地址的客户。
所以,首先查找第一个地址的第一个姓氏(Davies),然后查找具有相同地址(独立于姓氏)的客户,并获取他们(Willis),然后继续下一个客户姓氏或地址如果有更多来自同一客户。以此类推。
我想要的结果:
idcustomer, surname, name, id_dir, address
2, "Davies", "Sarah", 2, "other address"
1, "Willis", "John", 2, "other address"
2, "Davies", "Sarah", 4, "my other house address"
1, "Willis", "John", 4, "my other house address"
4, "Ede", "Linda", 3, "holliday address"
4, "Ede", "Linda", 5, "Flat in the beach address"
3, "Jones", "Mark", 1, "some address"
这甚至可以使用 mysql 查询吗?还是一种独特/更好的方法是进行示例查询,将其保存在数组中并使用 php 从那里订购?在这两种情况下我怎样才能得到它。
感谢任何帮助或建议!
【问题讨论】:
标签: php mysql group-by sql-order-by