我一直在尝试根据child和parent的parent_id概念从同一个表中获取记录。一个额外的列是定义排序顺序的序列。
我的数据是......
Sr.No | Name | parent_id | Sequence
1. | Customer | 0 | 0
2. | orders | 0 | 5
3. | General | 0 | 10
4. | All | 1 | 0
5. | Purchased | 1 | 5
6. | Non-Purch | 1 | 10
7. | Pending | 2 | 0
8. | Change Pass | 3 | 0
9. | Logout | 3 | 5
我想在单次执行中提取数据。虽然我无法使用外连接,因为它不受mysql支持。
My Tried sql is ..
SELECT b.* FROM soi_admin_menu a RIGHT JOIN soi_admin_menu b ON a.menu_id = b.parent_id WHERE 1=1 AND a.parent_id = 0 ORDER BY a.sequence, b.parent_id ASC
我想要按顺序排列这样的数据。
--Customer
--All
--Purchased
--Non-Purchased
--Orders
--Pending
--General
--Change Password
--Logout
包含所有字段。我的数据库是MySQL
答案 0 :(得分:3)
如果没有OUTER JOINS,UNIONS或其他假设,你就无法做到。
如果您可以假设,Sequence和Sr.No对parent_id = 0的行给出相同的顺序,您可以尝试类似:
SELECT soi_admin_menu.*,
CASE
WHEN parent_id=0 THEN Sr.No * 10000
ELSE parent_id * 10000 + 1 + Sequence
END as my_order
FROM soi_admin_menu
ORDER BY my_order;
请注意,此解决方案为您提供了Sequence,id和parent的限制(在本例中为10000)。要摆脱限制,请使用字符串连接,并按字符串时间列排序,如果是根行,则使用低于任意字符的哈希值。
没有OUTER JOINS,UNIONS或其他假设,没有办法说出哪一个
6. | Non-Purch | 1 | 10
7. | Pending | 2 | 0
先行。
答案 1 :(得分:1)
SELECT *,
CASE
WHEN parent_id=0 THEN Sr.No * 100
ELSE parent_id * 100 + Sequence
END as my_order
FROM soi_admin_menu a