0

ID の順序をランダム化し、一時 ID 列に配置するクエリを作成しようとしていますが、ステータス列が「2」とマークされている場合のみ

テーブルは次のように始まります。

id       tempid     status
1     |    -1    |    2
2     |    -1    |    2
3     |    -1    |    2
4     |    -1    |    2
5     |    -1    |    2
6     |    -1    |    2
7     |    -1    |    1
8     |    -1    |    1
9     |    -1    |    2

そして、クエリの後、次のようになります。

id       tempid     status
1     |    2     |    2
2     |    9     |    2
3     |    1     |    2
4     |    5     |    2
5     |    3     |    2
6     |    4     |    2
7     |    -1    |    1
8     |    -1    |    1
9     |    6     |    2

どんな助けでも大歓迎です:D

4

1 に答える 1

0

これは機能します:

SET @newTempID=0;
UPDATE ttable 
LEFT JOIN 
  (SELECT id, @newTempId:=@newTempId+1 AS tempid ,status
   FROM 
     (SELECT id,status FROM ttable WHERE status=2 ORDER BY RAND()) t 
  ) t2 ON ttable.id=t2.id 
SET ttable.tempid=t2.tempid WHERE ttable.status=2;

午前6時で寝ていないので恐ろしく見えますが、テストしたところ動作します. 機能させるには、両方のクエリを実行する必要があることに注意してください。これで実際に問題が解決する場合は、解決済みとしてマークしてください。

于 2013-10-26T13:39:21.417 に答える