2009-11-10 4 views
0

이것은 MySQL 전문가가 쉽게 할 수 있다고 가정합니다. 키 1과 키 2가 함께 기본 키를 구성하는MySQL : 임의 반복 위치 값으로 채우기

key1 | key2 | foobar | position 

같은 기존 작성 MySQL을 InnoDB의 테이블을 감안할 때, 위치는 SQL 내가 가장 무작위 순서로 "위치"필드를 채울 것입니다 무슨과, 여전히 대부분 NULL이다 하지만 정수 값을 반복? 예 :

3 
1 
4 
2 

배경 : 4 개 행이 있다면, 그때 (그냥 예를 들어 순서로) 갖고 싶은 나는 웹 응용 프로그램에서 사용자에게 테이블을 표시 할, 그리고 순서가 고정해야하지만, 무작위로, 즉 무작위로 결정되었지만 예측 가능한 순서로 결정됩니다. 때로는 주문을 완전히 개편해야하지만 테이블의 나머지 부분은 그대로 유지됩니다. 또한 때로는 새로운 위치로 테이블에 몇 개의 행을 추가해야하지만,이 새로운 행은 기존의 행보다 낮은 위치를 지정해서는 안되며 따라서 반복 할 필요가 있고 완전히 무작위로 말하지는 말아야합니다 흙손.

답변

1

이 같은 것을 시도 할 수 있습니다 :

CREATE TEMPORARY TABLE IF NOT EXISTS temptable (
    key1 int NOT NULL, 
    key2 int NOT NULL, 
    pos int NOT NULL auto_increment, 
    PRIMARY KEY (key1, key2) 
    ) 
SELECT key1, key2 
FROM yourtable 
ORDER BY RAND(); 

UPDATE yourtable 
SET position = pos 
FROM yourtable INNER JOIN temptable 
       ON yourtable.key1 = temptable.key1 
        AND yourtable.key2 = temptable.key2;