2016-05-12 69 views
3

我有3列的表,如下所示:查询来选择一个随机行无任何重复

色谱柱:

  1. ID
  2. Channel_Location
  3. 二手

我想从表中检索一个随机条目并更新Used列到1。但是,当我运行我的代码时(如下所示),它将返回0行,并且不会返回任何想法。我想知道为什么这种情况?

的代码来解决这个问题

UPDATE channels 
SET Used = 1 
WHERE ID IN (
    SELECT ID 
    FROM (select ID 
    FROM channels 
    WHERE Used != 0 
    ORDER BY RAND() 
    LIMIT 1) x); 
+0

那么应该怎么更新?如果'Used!= 0'设置'Used = 1',默认情况下所有行的'Used = 0' - 你是否看到这个问题? – Reto

回答

1

的一种方式,是做如下:

SET @uid := (SELECT ID FROM channels WHERE Used = 0 ORDER BY RAND() LIMIT 1); 
UPDATE channels SET Used = 1 WHERE ID = @uid; 
SELECT * FROM channels WHERE ID = @uid; 
+0

这很奇妙,但现在我有另一个问题,它不会返回值>。<我的PHP端。 –

+0

因此,无论如何要确保SELECT查询将选择与UPDATE查询相同的一个? –

+0

没有,但我的更新答案应该;) – Reto