2014-12-05 114 views
0

我正在更新一堆記錄並返回它們的ID,然後我需要SELECT它們。
使用WHERE IN我只得到第一行。
我怎麼能SELECT所有這些?MySQL - WHERE IN(@blob)只返回第一行

SET @updated := null; 
UPDATE table1 set table1.enabled = 0 WHERE table1.limit > 10 AND (SELECT @updated := CONCAT_WS(', ', table1.id, @updated)); 
SELECT * from table1 where table1.id IN (@updated); 
+1

你的問題在哪裏? – cybermonkey 2014-12-05 11:40:41

+0

@cybermonkey嗯,我需要選擇所有這些,而不僅僅是第一個。 – Sheraf 2014-12-05 11:42:10

+0

使用'從表'中選擇*,然後遍歷表項。 – cybermonkey 2014-12-05 11:43:53

回答

1

不要把它放在where條款。你可以這樣說:

SET @updated := null; 
UPDATE table1 
set table1.enabled = 0 
, id = if(@updated := concat_ws(', ', table1.id, @updated), id, id) 
WHERE table1.limit > 10; 
SELECT * from table1 where table1.id IN (@updated); 

別擔心,你的ID將不會被觸及,MySQL不更新一列,若該值不會改變。

但請注意,您可以先選擇並稍後更新。

START TRANSACTION; 
SELECT GROUP_CONCAT(id SEPARATOR ', ') INTO @updated FROM table1 WHERE limit > 10; 
UPDATE ... 
COMMIT; 

在交易中這樣做。

+0

謝謝,第二個解決方案可能更適應! – Sheraf 2014-12-06 09:33:17