2016-05-12 53 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