2011-08-13 9 views
1

私はeditablesortableのテーブルを持っています。この表には、親と子の2種類の項目があります。私は、ユーザーが2つの間で切り替えて、2つの間をドラッグして、その順序を更新できるようにしたいと思います。データベーステーブルは次のようになります。これを熟考してください。 PHP brain twister、ソート可能な編集可能なテーブル

+-------------------------------------------------------+-----------+ 
|id | userid | item   | parent | item order | parent_id | 
+-------------------------------------------------------+-----------+ 
|23 | 5  | cheese burger |false |  2  | 128 | 
+-------------------------------------------------------+-----------+ 
|128| 5  | Burgers   |True |  0  | 0  | 
+-------------------------------------------------------+-----------+ 
|10 | 5  | Hamburger  |false |  1  | 128 | 
+-------------------------------------------------------+-----------+ 
|25 | 5  | steak burger |false |  3  | 128 | 
+-------------------------------------------------------+-----------+ 
|90 | 5  | fish burger |false |  4  | 128 | 
+-------------------------------------------------------+-----------+ 
|29 | 5  | fries   |True |  5  |  0  | 
+-------------------------------------------------------+-----------+ 
|22 | 5  | cheese Fries |false |  6  |  29 | 
+-------------------------------------------------------+-----------+ 
|987| 5  | french fries |false |  7  |  29 | 
+-------------------------------------------------------+-----------+ 

これは私のヘッダーを表すので....

BURGERS 
Hamburger 
Cheese burger 
Steak burger 
Fish burger 
FRIES 
Cheese fries 
French fries 

アッパーケースのようなメニュー*

を与えるだろう、私は正しい順序、何の問題を得ることができます。私のスクリプトPOSTは、アイテムオーダーの配列です。

Array 
(
    [0] => 128 
    [1] => 10 
    [2] => 23 
    [3] => 25 
    [4] => 90 
    [5] => 29 
    [6] => 22 
    [7] => 987 
) 

それから私は、DBはこれに似これを反映するために更新...私はつまずきい

UPDATE menu SET item_order = '0' WHERE item = '128' 
UPDATE menu SET item_order = '1' WHERE item = '10' 
UPDATE menu SET item_order = '2' WHERE item = '23' 
UPDATE menu SET item_order = '3' WHERE item = '25' 
UPDATE menu SET item_order = '4' WHERE item = '90' 
UPDATE menu SET item_order = '5' WHERE item = '29' 
UPDATE menu SET item_order = '6' WHERE item = '22' 
UPDATE menu SET item_order = '7' WHERE item = '987' 

は親ID権を取得しています。私は、parent IDを見つけて、< >のことをやっていますが、それは一貫して正しいとは言えません。ヘッダーをドラッグすると、子供たちが骨折します。すなわち、すべての子供がドラッグされたヘッダを採用する。どのようにこれにアプローチしますか?上記の更新は、新しいアイテムが追加されたとき、またはアイテムがドラッグされたときに発生します。

EDIT

これが動作しているようです......

$order = "SELECT itemOrder, itemId, header from menuItems && user = $user order by itemOrder"; 
    $order_query = mysql_query($order); 
    while($order_result = mysql_fetch_array($order_query)) 
     { 
     $parent = $order_result['header']; 
     if ($parent == 'true') 
      { 
      $current_parent = $order_result['itemId']; 
      } 
      $item_id = $order_result['item_id']; 
      $parent_update = "UPDATE menuItems SET parent = '$current_parent' WHERE itemId = $itemId"; 
      mysql_query($parent_update); 
+0

あなたの編集が表示されます。すばらしいです。お役に立てて嬉しいです。私は擬似コード構造をより正確に(具体的にはアイテムの2つの別々のアップデートに)従っていたでしょうが、あなたは今やっているように、ヘッダを自分自身を親として持つように更新しません。 :) – GolezTrol

答えて

1

メニューは、おそらく、2つのテーブルを持っていることが容易ではないでしょうかしら、階層構造ではありませんので、 1つはヘッダーを含み、もう1つはアイテムを含む。

しかし、この解決策はあまり重要ではありません。 ParentIDについて

:親自体ではありません各項目が自分の投稿を順番にすべての項目を介して親、あなたは可能性だけのループを持っており、この(擬似コード)を適用すべきであると仮定すると、

ロジック:

$parentId = null; 

loop through items: 
    if item->type == header: 
    set $parentId to item->id 
    update sort order 
    else (item is.. well, item) 
    check if $parentId !== null. Fail otherwise (item above first header) 
    update sort order and parentId 
関連する問題