2010-11-15 4 views
1

Je dois afficher une info-bulle quotidienne et ma structure de table comme ci-dessous.Requête Mysql pour la mise à jour de la ligne suivante

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

et la requête select * from newstip where ndate!=NULL et vérifie si Ndate correspond à la date actuelle de son ok. sinon je dois mettre à jour la ligne suivante (1567 dans ce cas) à la date actuelle et toutes les autres à la valeur NULL.

id est unique mais pas dans la séquence donc en-dessous de la requête impossible.

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

Comment résoudre cette situation? J'utilise PHP à ce processus;

Répondre

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

Cela ne rien mettre à jour si aucun enregistrement a un id > 1545.

3

Si votre id va être plus grand, vous pouvez simplement faire une requête pour la ligne suivante et la mettre à jour. Dans votre cas:

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

Je dois mentionner que cette instruction n'est pas sans danger pour la réplication.

3

Étant donné que la id de la dernière ligne complète est stockée dans :old_id:

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

Voici une procédure de trou dans une base MySQL pour mettre à jour toutes les lignes ci-dessous

CREATE PROCEDURE (MISES À JOUR)

BEGIN

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

DÉCLARER idd INT; DECLARE cur1 CURSEUR POUR SELECT id frontrée newstrip où id> 1545 ordonnée par 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;

Questions connexes