2010-12-20 7 views
2

PK가 int 필드 인 테이블이 있습니다. 제 문제는 두 개의 값을 서로 바꿔야한다는 것입니다.한 번에 두 ID를 업데이트하십시오. SQL - PHP

이 내 현재 코드입니다 :

$newId = (int)$id; $newId = $newId - 1; 

$result = mysql_query("UPDATE homeScroller SET id = '$newId' WHERE id = '$id'") or die('error '.mysql_error()); 
$result2 = mysql_query("UPDATE homeScroller SET id = '$id ' WHERE id = '$newId'") or die('error '.mysql_error()); 

표는 웹 사이트의 주요 뉴스에 슬라이드 쇼에 대한 정보를 포함 최대 3 행에 포함되어 있습니다. FrontPage는 ID로 주문합니다. 주문을 변경하려면 ID를 수정해야합니다.

+0

당신이 – Woot4Moo

+0

왜 당신이 주변을 교환해야합니까 교체 할 필요가 무엇인지에 더 명확 할 수 있습니까? 이것은 일반적으로 응용 프로그램 코드에서 발생하지만 데이터베이스 수준에서만 수행되는 작업은 아닙니다. – HLGEM

+0

당신은 $ id가 너무 int인지 확인하고 있습니까? ;) – DampeS8N

답변

3

테이블에는 웹 사이트의 FrontPage에서 슬라이드 쇼에 대한 정보가 들어있는 최대 3 개의 행이 들어 있습니다. FrontPage는 ID로 주문합니다. 주문을 변경하려면 ID를 수정해야합니다.

그렇다면 응용 프로그램/데이터베이스의 아키텍처가 잘못 설계되어 있으므로 더 이상 고려하기 전에 데이터베이스 디자인을 다시 생각해 봐야합니다.

기본 키는 변경 불가능해야합니다. 즉, 이 아니어야합니다.으로 변경해야합니다. 당신이하는 일은 기본 키를 바꾸는 것입니다.

응용 프로그램/데이터베이스를 수정하면이 문제가 발생하지 않습니다. 새 필드 'sort_order'와 ORDER BY sort_order를 대신 추가하거나 ID 필드로 정렬해서는 안됩니까?

+0

사실,'position' 열을'homeScroller' 테이블에 추가하고이를 대신 업데이트하는 것이 좋습니다. – prodigitalson

+0

오, 훨씬 더 의미가 있습니다! – Max

1

임시 ID를 할당 한 (0, AUTO_INCREMENT는 보통 1에서 시작하기 때문에, 그래서 0이되지 않는이어야 함) :

$result = mysql_query("UPDATE homeScroller SET id = 0 WHERE id = '$id'"); 
$result = mysql_query("UPDATE homeScroller SET id = '$id ' WHERE id = '$newId'"); 
$result = mysql_query("UPDATE homeScroller SET id = '$newId ' WHERE id = 0"); 

중요 : 그러나, 당신은에 대한 기본 키에 의존해서는 안 주문을 쉽게 변경할 수 있기를 원하면 주문 결과. sequence 열을 추가하고 그 대신에 정렬하십시오.

1
UPDATE homeScroller 
SET  id = CASE id WHEN $id THEN $newid ELSE $id END 
WHERE id IN ($id, $newid) 
+0

공상 ... :)이 모든 것이/대부분의 SQL 데이터베이스 엔진에서 지원합니까? – netcoder

+0

예, 모든 주요 사항 – Quassnoi

0

이러한 용도로 PK를 사용하지 마십시오.

타임 스탬프 필드 (shown_at)를이 테이블에 추가 할 수 있다면 그렇게하십시오! cant이면 모든 PK를 동시에 업데이트하십시오. 그냥 증분. 예를 들어 : 우리는 같은 문자열이 있다고 가정

1 photo1 
    3 myphoto 
    5 somephoto 

    than use modulo 3. 
    1%3 = 1 
    3%3 = 0 
    5%3 = 2 

    increment all records 

    2 photo1 
    4 myphoto 
    5 somephoto 

    2%3 = 2 
    4%3 = 1 
    6%3 = 0 

그래서 u는 모듈을 사용하여 증가 할 수 있습니다 ID를

관련 문제