我正在处理MySQL / PHP Web应用程序中的以下问题:
有人看到列的人员表:
ID,firstname,surname,idOfPartner,street,zipCode
应该以该人的姓氏命令,然后由该人的伴侣跟随,以便结果看起来像
人A
A人的伴侣(无论姓氏是什么)
人B
B人的合伙人
......
我目前正在做一个简单的ORDER BY姓氏,并将它们放在PHP代码中。
目前我的查询只是
SELECT * FROM customers ORDER BY surname, firstname
其余的是在PHP代码中完成的,这非常慢。
这甚至只能在数据库中实现吗?它的表现更好吗?
答案 0 :(得分:2)
好的,让我们建立起来。
没有合作伙伴的人员名单是:
SELECT a.surname, a.firstname,
a.surname sortsurname, a.firstname sortfirstname, a.id sortid,
0 role
FROM person a
现在我们取得这些人的伙伴。在这个JOIN中,b是合作伙伴。
SELECT b.surname, b.firstname,
a.surname sortsurname, a.firstname sortfirstname, a.id sortid,
1 role
FROM person a
JOIN person b ON b.id = a.idofpartner
现在我们将这两个表与UNION ALL结合起来,并对排序名称和角色
进行整理SELECT surname, firstname, role FROM (
SELECT a.surname, a.firstname,
a.surname sortsurname, a.firstname sortfirstname, a.id sortid,
0 role
FROM person a
UNION ALL
SELECT b.surname, b.firstname,
a.surname sortsurname, a.firstname sortfirstname, a.id sortid,
1 role
FROM person a
JOIN person b ON b.id = a.idofpartner
) both
ORDER BY sortsurname, sortfirstname, sortid, role
这里的技巧是为角色分配0角色,为角色分配角色1,并在结果集中创建额外的列以允许排序。我添加了sortid参数来处理多个人共享名称的情况。