2010-11-23 3 views
1

1000 개 이상의 레코드가 있다고 가정합니다. 이 작업을 수행하는 유일한 방법은 모든 레코드 위치를 업데이트하는 것입니다. 나는 "position"라는 열, 1, 2, 3, 4, 5, 있다고 가정 해 봅시다MYSQL - 데이터 레코드의 순서 변경

하자 사용자가 "5"후 기록 "2"레코드의 위치를 ​​이동하고 싶은 말 이렇게하려면 "3"을 녹음하려면 레코드 "5"를, "4"를 녹음하려면 "3"을, "5"를 녹음하려면 "4"를 녹음해야합니다.

다른 방법이 있습니까? 네가 많은 레코드를 가지고있을 때 이것은 과잉 보인다.

감사합니다.

+0

기본 키 란 무엇입니까? 귀하의 질문의 의미는 귀하의 테이블 구조에서 더 분명해질 것입니다. –

+0

위치가 기본 키가 아니며 기본 키로 "uid"라는 열 이름이 있습니다. – dpark

답변

0

데이터를 정렬하는 데 사용하는 추가 필드가있는 대신 NextItem 외래 키를 도입하십시오. 항목의 원래 기본 키를 유지할 수 있습니다. 기본 키는 여전히 식별 값의 역할을하지만 정렬 순서와는 아무런 관련이 없습니다. 주문 다시 이제 당신이 할 일은하는

ID: 33, Name: The first item, NextItem: 48 
ID: 48, Name: The second item, NextItem: 12 
ID: 12, Name: The last item, NextItem: NULL 

를 데이터가 단일 레코드의 'NextItem'을 변경할 수 있습니다 :

이있을 수 있습니다.

+0

재미있는 아이디어 : "첫 번째"항목을 어떻게 식별합니까? "첫 번째"항목이 주어지면이 방법을 사용하여 항목을 어떻게 주문합니까? 귀하의 예제를 감안할 때 적어도 SQL 쿼리를 사용하는 것은 아닙니다. –

+0

그러나 아직 각 레코드를 업데이트하여 certan 순서로 레코드를 배치해야합니까? – dpark

0

적절한 해결책은 위치 정보 사용 방법과 속도 요구 사항에 따라 다릅니다. "ORDER BY position"을 사용하여 레코드를 검색 할 때 데이터베이스에서 위치 정렬을 수행하기를 원한다면 영향을받은 각 행의 위치 정보를 업데이트 할 필요가 없다는 것을 생각할 수 없습니다. 평범한 테이블 PK에 대한 외래 키만을 포함하는 별도의 테이블에 위치 정보를 유지함으로써 잔인 함을 약간 줄일 수 있습니다. 이렇게하면 데이터베이스가 훨씬 작은 테이블에서만 업데이트를 수행하게됩니다.