Mysql查询更新下一行

时间:2010-11-15 05:53:45

标签: php mysql

我需要每天显示一个新闻提示,我的表结构如下所示。

| id  |  ndate      |News Tip |
+------+----------------------+
| 1541 | NULL       | news1   |
| 1545 | 14-10-2010 | news2   | 
| 1567 | NULL       | news3   |
| 1568 | NULL       | news4   |
| 1582 | NULL       | news5   |
     ....     ....      
| 1702 | NULL       | news217 |

和查询select * from newstip where ndate!=NULL并检查ndate是否与当前日期匹配。如果不是我需要将下一行(在这种情况下为1567)更新为当前日期而将所有其他行更新为NULL。

id是唯一的,但不按顺序,因此在查询下方不可能。

update newstip set ndate='15-10-2010' where id=(id+1); //failure

如何解决这种情况?我正在使用php进行此过程;

4 个答案:

答案 0 :(得分:3)

如果您的id会更大,您只需查询下一行并进行更新即可。在你的情况下:

UPDATE newstip SET ndate = '15-10-2010' WHERE id > 1545 ORDER BY id ASC LIMIT 1

我应该提一下,这句话不是复制安全的。

答案 1 :(得分:3)

鉴于最后一个完整行的id存储在:old_id

UPDATE `newstip` SET `ndate`=15-10-2010` WHERE `id` > :old_id ORDER BY `id` LIMIT 1;

答案 2 :(得分:2)

UPDATE newstip
SET ndate = '15-10-2010'
WHERE id = ( SELECT id FROM newstip WHERE id > 1545 ORDER BY id LIMIT 1 )

如果没有记录有id > 1545,则不会更新任何内容。

答案 3 :(得分:1)

这是mysql中的一个洞程序,用于更新

下面的所有行

CREATE PROCEDURE upDates()

BEGIN

DECLARE dat = date('16 -10-2010');

DECLARE idd INT;

DECLARE cur1 CURSOR FOR SELECT id fron newstrip,其中id> 1545按id排序;

read_loop:LOOP

FETCH cur1 INTO a;

IF done THEN

  LEAVE read_loop;

END IF;

update newstrip set ndate=dat where id=a;

dat=DATE_ADD(dat,INTERVAL 1 DAY);

END LOOP;