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 回答