2011-01-16 5 views
0

質問が更新PHPでの親IDに応じて:

私は、ネストされたソート可能なツリーから取得した次の配列を、しました。 $keyはPAGEのIDを意味し、親IDは$valueです。私のMySQLテーブルでは、すべてのページ(更新時)のparent_idを変更し、親IDに応じてPAGEのORDERを格納します。次の例では

I = 1 parent_idで3つのIDSをしました:

私は扱うことができますどのように
UPDATE pages SET parent_id=1,order=0 WHERE id=5 
UPDATE pages SET parent_id=1,order=1 WHERE id=2 
UPDATE pages SET parent_id=1,order=2 WHERE id=3 

Array 
(
    [1] => 0 
    [5] => 1 
    [2] => 1 
    [3] => 1 
    [4] => 3 
    [6] => 3 
) 

:5、2と3、私はのように保存MySQLの5,2及び3に更新するようにしましたこれはPHPでですか?すべてのページidに対してforeachを実行し、foreachの各ループでMySQLアップデートを送信しますか?

ありがとうございます!

+0

あなたはより明確にする必要があります。 「注文番号...親に応じて」とはどういう意味ですか? –

+0

説明が不明です。最後に何をしたいですか?あなたは正しい昇順になるようにすべてのキーを変更したいですか? –

+0

その配列はツリーを表しますか?一貫性を保ち、問題を書き直すべきです。 –

答えて

1

を使用することになり、私はあなただけが変更かどうかを確認するために比較し、次に使用された最後の親IDを追跡するために別の変数を使用したいと思います。

// make sure the array is sorted by parent id 
asort($array); 

$last_parent = -1; 
foreach ($array as $id => $parent_id) 
{ 
    if ($last_parent != $parent_id) 
     $order = 0; 

    $query = 'UPDATE pages SET parent_id = ' . $parent_id . ', order = ' . $order . ' WHERE id = ' . $id; 

    $last_parent = $parent_id; 
    $order++; 
} 
+0

あなたの答えをありがとうが、私はこれが失敗すると思います。 [1] => 0、[2] => 1、[3] => 1 ...しかし、これが失敗すると、 '[1] => 0、 [2] => 3、[3] => 1、[4] => 3、[5] => 4 ' – udexter

+0

ソート()ではなく、あなたが望むasort()です。私は私の答えを編集しました。 – Mike

1

値に基づいて配列を並べ替えたいと言っていますか?

その場合、あなたが

sort($array); 
+0

いいえ、申し訳ありません。質問が更新されました。とにかくありがとうございます – udexter

関連する問題