2011-01-16 3 views
0

질문은 업데이트 된 PHP의 부모 ID에 따라 :

나는 중첩 정렬 나무에서 얻은 다음 배열을했습니다. $key은 PAGE의 ID를 의미하며 $value은 상위 ID입니다. 내 MySQL 테이블에서 모든 페이지 (업데이트 할 때)의 parent_id을 수정하고 상위 ID에 따라 페이지 순서를 저장해야합니다. 내가 처리 할 수있는 방법

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, 내가 MySQL을 5,2에 업데이트 할했습니다 3. 3 : 다음 예에서

나는 parent_id = 1로 3 개 ID를했습니다 이 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, sort ($ array) [2] => 3, [3] => 1, [4] => 3, [5] => 4 ' – udexter

+0

원하는 asort()가 아니라 sort()입니다. 내 대답을 편집했습니다. – Mike

1

값에 따라 배열을 정렬 하시겠습니까?

하는 경우 당신이

sort($array); 
+0

아니요, 죄송합니다. 질문이 업데이트되었습니다. 어쨌든 고맙습니다. – udexter