3

php で行われたページのカスタム CMS pagemanager を注文するのを手伝ってくれる人はいますか?

ページ(記事)を管理するデータベーステーブルがあります。id - 親 ID - コンテンツ - タイトル - 注文 - など

これを選択してhtmlテーブルにツリーオーダー(親、次に子も同様)として表示しました..編集/削除オプションとページを注文するための1つの列を配置し、上/下矢印で列を注文したい..そしてクリックするとその上で、データベーステーブルの対応する Order フィールドを交換する必要があります(いくつかの数字が含まれています)。問題は、ここに親とその子が含まれているため、矢印を正しい順序で配置する必要があることです...つまり、子と親を交換しないでください。同じ親 ID (存在する場合) を持つ列のみを交換する必要があります。

4

1 に答える 1

1

コードやデータベース構造が提供されていないので、基本的な順序付けシステムについて説明します。問題を解決する方法を理解していただければ幸いです。

これらが mysql テーブルのデータであると想像してください。

id - parent - title - order
1  - 0      - abc   - 1
2  - 0      - xyz   - 2
3  - 1      - 123   - 1
4  - 1      - 456   - 3
5  - 1      - 789   - 2

次のようなクエリを作成した場合:

SELECT ...  ORDER BY order, id ASC

次のようなツリーがあります。

- root (id:0)
    |
    |___ abc (id:1)
    |     |___ 123 (id:3)
    |     |___ 789 (id:5)
    |     |___ 456 (id:4)
    |
    |___ xyz (id:2)

entry (id:5) をクリックして entry789よりも高い順序にする場合123、SQL クエリは次のようになります。

UPDATE table SET order = order + 1 WHERE order = order - 1 AND parent = 1

次のクエリ:

UPDATE table SET order = order - 1 WHERE id = 5

ツリーは次のようになります。

- root (id:0)
    |
    |___ abc (id:1)
    |     |___ 789 (id:5)
    |     |___ 123 (id:3)
    |     |___ 456 (id:4)
    |
    |___ xyz (id:2)

より柔軟な方法が必要な場合は、次のようなものも使用できます。

(ここでは、1 から 100 までの 100 行があり、id:33 を id:51 の後の場所に移動したいとします)

UPDATE table SET order = order + 1 WHERE order >= 51
UPDATE table SET order = 51 WHERE id = 33
UPDATE table SET order = order - 1 WHERE order BETWEEN 33 AND 50
于 2012-10-10T12:50:18.283 に答える