1

私は管理をしなければなりません。私は SQL の達人ではありません。おそらく、このクエリは本当に単純ですが、うまく書けません。基本的に、すべてのページは隣接リスト モデルを使用して配置されます (私はディープも追跡しています)。

+----+---------------+-------------------+-----------+
| id | title         | level | position  | parent_id |
+----+---------------+-------+-----------+-----------+
|  1 | Home          | 0     | 0         | null      |
+----+---------------+-------+-----------+-----------+
|  2 | Resources     | 0     | 1         | null      |
+----+---------------+-------+-----------+-----------+
|  3 | About         | 0     | 2         | null      |
+----+---------------+-------+-----------+-----------+
|  4 | Documents     | 1     | 0         | 2         |
+----+---------------+-------+-----------+-----------+
|  5 | Tutorials     | 1     | 1         | 2         |
+----+---------------+-------+-----------+-----------+

位置は同じ親の中で一意であることに注意してください。

私が達成しようとしているのは、親と位置で並べ替えることですが、親カテゴリはその子の直前にリストする必要があります。これは明らかであり、機能しません。

SELECT * FROM PAGE p
ORDER BY parent_id, position

結果は最初のテーブルです。必要なものは次のとおりです。

+----+---------------+-------------------+-----------+
| id | title         | level | position  | parent_id |
+----+---------------+-------+-----------+-----------+
|  1 | Home          | 0     | 0         | null      |
+----+---------------+-------+-----------+-----------+
|  2 | Resources     | 0     | 1         | null      | // Parent of 4, 5
+----+---------------+-------+-----------+-----------+
|  4 | Documents     | 1     | 0         | 2         | // Child of Resource
+----+---------------+-------+-----------+-----------+
|  5 | Tutorials     | 1     | 1         | 2         | // Child of Resource
+----+---------------+-------+-----------+-----------+
|  3 | About         | 0     | 2         | null      |
+----+---------------+-------+-----------+-----------+

再帰をサポートしていないMySQLでこれは可能ですか?

4

1 に答える 1

0

クエリを制限できる場合は、自己結合を使用できます。または、ネストされたセットまたはセルコ ツリーを試してください。

于 2013-11-09T22:05:35.373 に答える