2

我一直在尝试根据 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 不支持它。

我试过的 sql 是..

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

4

2 回答 2

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;

请注意,此解决方案为您提供了对序列、id 和父级的限制(在本例中为 10000)。要摆脱限制,请使用字符串连接并在根行的情况下按具有低于任何字符散列的字符串时间列进行排序。

没有 OUTER JOINS、UNIONS 或其他假设,就无法说出哪个是

6.    | Non-Purch    | 1               | 10
7.    | Pending      | 2               | 0

先走。

于 2013-09-16T08:42:13.560 回答
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
于 2013-09-16T08:49:46.143 回答