我需要每天显示一个新闻提示,我的表结构如下所示。
| 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进行此过程;
答案 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;