Décaler les valeurs dans une base mySQL

Décaler les valeurs dans une base mySQL - SQL/NoSQL - Programmation

Marsh Posté le 07-12-2004 à 19:21:08    

coucou,
 
j'ai une table mySQL appellée pages, comprenant deux champs: id et statut
id correspondant au numéro de la page, et statut indiquant par 0 ou 1 si elle est vide ou pas
 
si je veux insérer qqc sur une page déjà pleine, je dois pouvoir décaler le contenu de cette page et insérer le mien. disons que je veux inserer du contenu en page 1, je dois pouvoir passer de:
 
page 1 pleine
page 2 vide
page 3 pleine
 
a page 1 pleine, page 2 pleine, page 3 vide
 
y a t'il une syntaxe SQL dans update permettant de récuperer la valeur du champ de la ligne précédente?

Reply

Marsh Posté le 07-12-2004 à 19:21:08   

Reply

Marsh Posté le 08-12-2004 à 11:00:20    

non. à la limite, avec une sous-requête de derrière les fagots, je te fais ça pour un vrai SGBD, mais vu qu'il y a 99,999999999999 % des chances pour que ton MySQL ne supporte pas les sous-requêtes, confirme d'abors ce point avant que je me creuse pour la solution.


Message édité par Arjuna le 08-12-2004 à 11:00:32
Reply

Marsh Posté le 08-12-2004 à 13:59:50    

Arjuna a écrit :

vu qu'il y a 99,999999999999 % des chances pour que ton MySQL ne supporte pas les sous-requêtes


Les versions 3.x commencent à dater hein...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-12-2004 à 14:03:18    

skeye a écrit :

Les versions 3.x commencent à dater hein...[:dawa]


Et y'a pas beaucoup de FAI qui sont passé aux 4.x, et encore moins qui ont activé cette fonction qui est débrayable.


Message édité par Arjuna le 08-12-2004 à 14:03:43
Reply

Marsh Posté le 08-12-2004 à 18:06:44    

Normalement il devrait s'agir d'une base MySQL en version 4 sur notre server.
 
Mais comme je n'en suis pas sur il vaut mieux que l'auteur confirme.
 
Le but est bien évidemment de demander moins de ressource, qu'une requete par "page".

Reply

Marsh Posté le 08-12-2004 à 22:07:07    

Bon, grossomodo :
 

Code :
  1. -- Création de la nouvelle page (vide)
  2. insert into latable (status) values (' ');
  3. update latable t1
  4. set t1.status = (
  5.   selecy nvl(t2.status, '$valeurDeLaPageInsérée')
  6.   from latable t2
  7.   where t2.page(+) = t1.page - 1
  8.   and t2.page(+) > $positionPageInsérée
  9. )
  10. where t1.page >= $positionPageInsérée


 
A tester, et adapter la syntaxe à MySQL.
A priori, d'un point de vue "logique" ça doit être ça.
 
Cela dit... Je viens de réfléchir une seconde... Y'a pas besoin de faire ça !
 
Dans le cas où tu insères une page sur une page déjà pleine :
 
update latable set pageid = pageid + 1 where pageid >= $pageEnCours;
insert into latable (pageid, page) values ($pageEnCours, 'bla bla');
 
C'est plus simple :D


Message édité par Arjuna le 08-12-2004 à 22:10:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed