2

mysql テーブルをいくつかの異なる列でソートしようとしています。ここにテーブルがあります:

+------------+------------+------------+------------+
|     id     |  parent_id |  ordering  |    level   |
+------------+------------+------------+------------+
|      1     |     0      |      0     |      0     |
+------------+------------+------------+------------+
|      2     |     0      |      2     |      0     |
+------------+------------+------------+------------+
|      3     |     0      |      3     |      0     |
+------------+------------+------------+------------+
|      4     |     0      |      4     |      0     |
+------------+------------+------------+------------+
|      5     |     2      |      0     |      1     |
+------------+------------+------------+------------+
|      6     |     0      |      1     |      0     |
+------------+------------+------------+------------+

そして、これは私が達成したい結果です:

+------------+------------+------------+------------+
|     id     |  parent_id |  ordering  |    level   |
+------------+------------+------------+------------+
|      1     |     0      |      0     |      0     |
+------------+------------+------------+------------+
|      6     |     0      |      1     |      0     |
+------------+------------+------------+------------+
|      2     |     0      |      2     |      0     |
+------------+------------+------------+------------+
|      5     |     2      |      0     |      1     |
+------------+------------+------------+------------+
|      3     |     0      |      3     |      0     |
+------------+------------+------------+------------+
|      4     |     0      |      4     |      0     |
+------------+------------+------------+------------+

ご覧のとおり (うまくいけば)、アイテムを順序付けとparent_idで並べ替えたいと思います。可能であれば、単一のクエリを使用することをお勧めします。これが不可能な場合は、クエリと組み合わせて PHP ループを使用できます。可能であれば、複数のクエリを避けたいと思います。

parent_idの行などの行id=5が「親行」(行の行)の下になるように並べ替える方法が必要id=2です。「順序」は「レベル」に基づいています。

私が最も近いのは、これを次のように並べ替えることです。

SELECT * FROM table ORDER BY ordering,id,parent_id

どちらが返されますか:

+------------+------------+------------+------------+
|     id     |  parent_id |  ordering  |    level   |
+------------+------------+------------+------------+
|      1     |     0      |      0     |      0     |
+------------+------------+------------+------------+
|      5     |     2      |      0     |      1     |
+------------+------------+------------+------------+
|      6     |     0      |      1     |      0     |
+------------+------------+------------+------------+
|      2     |     0      |      2     |      0     |
+------------+------------+------------+------------+
|      3     |     0      |      3     |      0     |
+------------+------------+------------+------------+
|      4     |     0      |      4     |      0     |
+------------+------------+------------+------------+
4

2 に答える 2

3

SUMOrdering 列と Parent_Id 列で並べ替えようとしていますか? それらが両方とも数値データ型であると仮定すると、これは機能するはずです:

SELECT *
FROM YourTable
ORDER BY Parent_Id + Ordering, Id
于 2013-03-16T03:15:00.867 に答える
1

SQLFiddle デモ

SELECT * FROM mytable ORDER BY parent_id + ordering, id
于 2013-03-16T03:23:51.143 に答える