5

I have to select 3 rows from a table book(id,book_id,status) with status status=0.Initially all rows have status 0.So by using a select query.order by id and limit 3 I can select first 3 rows.The question is how can I update the selected rows status to 1 since they are selected.

Am using PHP, CodeIgniter and MySQL, can I do it in a single query?

Example:

id  book_id  status 
1     100      0
2     101      0
3     102      0
4     103      0
5     104      0
6     105      0

After selecting the first 3 rows the that rows's status should be updated to 1

id  book_id  status 
1     100      1
2     101      1
3     102      1
4     103      0
5     104      0
6     105      0
4

6 回答 6

3

sqlfiddle 演示

UPDATE t JOIN (select id from t where status = 0 
                    order by id limit 3) t1 USING (id)
SET status=1 ;
于 2013-04-26T07:40:44.833 回答
2

我已经使用 MySQL 自己的RAND(N)函数来解决这个问题。

参考资料说:

如果指定了整数参数 N,则将其用作种子值

这种行为的一个含义是,对于相等的参数值,RAND(N)每次 返回相同的值,从而产生可重复的列值序列

所以我可以从表中随机选择一组记录,并使用相同的种子,我可以更新完全相同的记录,而无需经过任何一个。

得到这样的东西:

SELECT id, book_id 
FROM book 
WHERE status = 0 
ORDER BY RAND({your_seed}) 
LIMIT 0, 3;

UPDATE book 
JOIN ( 
  SELECT id 
  FROM book 
  WHERE status = 0 
  ORDER BY RAND({same_seed}) 
  LIMIT 0, 3 
) temp USING (id) 
SET status = 1;

通过这种方式,您可以获得您的选择并更新完全相同的列表。

于 2018-02-16T00:05:50.420 回答
0

我不知道你是否解决了这个问题,但我面临同样的问题,但我的不同之处在于我只想选择/更新 1 行。我使用这样的用户变量来做到这一点:

SET @codigo:=NULL; -- the resulting value
UPDATE tproducto_codigos set canjeado=1, fecha_canjeo=NOW(), codigo=(@codigo:=codigo) 
 WHERE idtproducto_r=XXX AND canjeado=0 LIMIT 1; -- I only want the first row
SELECT @codigo as codigo; -- select the variable to get the value.

我希望这可以帮助您或其他正在寻找这个的人,因为我认为这很常见。

于 2014-09-15T10:27:57.600 回答
0

你可以做这样的事情

UPDATE TABLE NAME SET status = 1 WHERE id IN ( SELECT id FROM TABLE NAME  LIMIT 0,3)

希望这可以帮助

于 2013-04-26T08:00:02.433 回答
0

是的你可以。

UPDATE book
SET status = 1
WHERE id IN (
  SELECT id FROM book
  LIMIT 3
)
于 2013-04-26T07:34:27.370 回答
0

我认为这样的事情会做到

UPDATE book SET status = 1 WHERE id IN (SELECT id FROM book ORDER BY id LIMIT 3)
于 2013-04-26T07:35:18.740 回答