2009-09-06 2 views
1

현재 Flex 및 Zend Framework를 통해 Flash CMS를 만들고 있습니다. Flex 인터페이스에서 Zend Framework를 통해 MySQL 데이터베이스에서 드래그 할 수있는 항목 목록을 가져 왔습니다. 사용자는 드래그 앤 드롭하여 항목을 재정렬 할 수 있으며, 매핑 된 Flex 배열에서 순서가 변경됩니다.PHP를 통해 MySQL에서 "주문"열을 업데이트하는 가장 효율적인 방법은 무엇입니까

서버에 돌아 가기 "프레젠테이션 목적으로 항목의 순서를 추적하는"항목 "테이블의 열이 있습니다. 내 질문에 내 데이터베이스의 "주문"열에서 내 변경 사항을 업데이트하는 가장 효율적인 방법은 무엇입니까?

전체 배열을 반복하고 모든 행에서 업데이트 쿼리를 실행하여 카운터 값/반복기의 값으로 순서 값을 업데이트 할 수 있다는 것을 알았지 만,보기에는 조금 추한 것처럼 보일 수 있습니다. 매 행마다 잠재적으로 많은 쿼리를 MySQL에 매우 빠르게 전달할 수 있습니다.

모든 아이디어는 크게 감사하겠습니다.

감사합니다. :)

답변

1

, 당신은, 두 개의 쿼리 하나 개의 존재를 그것을 할 수 있습니다 오류.

1

사용자가 항목을 이동할 때마다 테이블을 업데이트하고 있습니까?

그렇다면과 연결된 데이터베이스의 항목 순서를 으로 저장할 수 있습니다. 각 항목은 그의 부모 - 그 위에있는 항목을 알 수 있습니다.

한 항목을 다른 곳으로 이동하면 데이터베이스가 3 개 업데이트되어 부모가 변경됩니다. 이 요소의 순서가있는 경우 : D와 E 사이 B C D E 드래그 B를 당신이 이 그래서 C D B 그래서 대신에 "순서"의 E

데이터베이스의 열에는 "id_parent"열이 있습니다.이 열은 하나의 요소 인 요소를 가리 킵니다. 그리고이 예에서 당신이 할 것 :

UPDATE C 세트 부모 = 'A' UPDATE B 세트 부모 = 'D' UPDATE E 세트 부모 = 'B'

+0

그리고 어떻게 가져 옵니까? – erenon

+1

응용 프로그램에서 순서가 수행됩니다. 배열을 두 번 통과해야합니다. –

+0

배열을 순회하여 정보의 순서를 다시 지정하는 방법에 대한 예제를 제공해 주시겠습니까? – jklina

0

이 나는 ​​원래 순서를 저장하는 것 배열 - 예를 들어 다음과 같은 POST 변수로 : $ _POST [order] = array (1,2,3). 사용자가 제출할 때 새 배열을 다른 배열에 저장합니다. 마지막으로 이전 값과 이후 값을 비교하여 차이가있는 부분 만 업데이트합니다.

코드 예제 :

$before = array(1,2,3); 
$after = array(2,1,3); 

for($i=0; $i<count($before); $i++) { 
    if($before[$i] !== $after[$i]) { 
     $chg[] = $i; 
    } 
} 

print_r($chg); 

결과 : 배열은 처음 두 행을 업데이트해야만을 것을 의미 ([0] => 0 [1] => 1)

.가짜 중복 키를 방지하기 위해 MySQL을 업데이트에서

UPDATE items SET `order` = `order` + 1 
    WHERE `order` >= :index_of_inserted_item 
    ORDER BY `order` DESC 

수행 할 수있다는 가장 높은 값 시작 : 단일 항목의 이동을 처리하는 경우

0

MySQL에 ROWNUM SQL 절이 있습니까? 있을 경우 다음과 같이 작동 할 수 있습니다 (또는하지 않음) :

UPDATE table 
SET Order = ROWNUM 
WHERE GroupId = Id 
관련 문제