MySQL champ borné

25 réponses
AuteurMessage

tybozz |
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 10:01

En ce dimanche, je bloque sur un truc :

Je fais un

update table set champ1 = champ1 + $var where id = $id

Or je veux que champ1 reste dans un certain interval par exemple [0, 1000]

J'ai pensé à faire un truc du style

update table set champ1 = min(0, max(100, champ1 + $var)) where id = $id

mais min et max ne servent pas a cela en mysql ...


des idées ?

edit :

J'ai trouvé une solution, avec des if imbriqués mais c'est pas joli a voir

(Message édité le 22-05-2005 à 10h26 par tybozz)

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 22/05/2005 à 13:15

tu fais exprès ou ? :p

update table set champ1 = champ1 + $var where id = $id AND champ1 < TALIMITEMAX-$var

par exemple

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 22/05/2005 à 13:27

ouais mais non Julgates, parce qu'à mon avis, dans son cas, s'il dépasse 100, il a envie que le champ soit à 100, et pas que la requête ne soit pas exécutée ...

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 22/05/2005 à 13:34

bhamp0 a dit :
ouais mais non Julgates, parce qu'à mon avis, dans son cas, s'il dépasse 100, il a envie que le champ soit à 100, et pas que la requête ne soit pas exécutée ...

vu comme ça

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 22/05/2005 à 14:49

tu sélectionnes champ1 avant et tu regardes sa valeur comme ca tu sais.

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 15:09

oui je veux le mettre a 100 et de plus l'update teste cela sur plusieurs champ

Et je veux éviter d'avoir un select a faire avant ... 2 requetes au lieu d'une je ne suis pas preneur

Je reste sur mes if imbriqués pour le moment alors

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 22/05/2005 à 15:27

sinon tu update tout

et ensuite tu fais un down des lignes > 100 à 100

exemple :

while{
update table set champ1 = champ1 + $var where id = $id AND champ1 < 100
}

puis

update table set champ1 = 100 where champ1>100

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 15:38

ca aussi ca fait plein de requetes ... et c'est des requetes qui vont être utilisés très souvent

Enfin bon si il n'y a pas moyen de dire a mysql tu me bornes ce champ, je garde mes if imbriqués (comme quoi j'ai du bien lire la doc et bien vu que ca n'existait pas ... j'esperais me tromper )

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

vivaslovenia | Patrick
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 16:20

si tu te limites à 1024, ya moyen au niveau du nombre de bit de ton champs...
c peu être une piste...ya surement moyen de bidouiller un truc.. au pire tu multiplies ton champs pour que la limite que tu cherches corresponde avec une limite binnaire (4,32,64,18,256....)





Adijo
Pat

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 16:22

je veux juste que ca soit borné entre 0 et 1000 et que si je fais un update faisant +5 alors que je suis a 998 ca me passe a 1000 et pareil si je suis a 3 et que je fais -5 ca me passe a 0

Et non pas faisable en jouant sur les bits car ce n'est pas une puissance de 2

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

vivaslovenia | Patrick
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 16:26

ben ça marche:

998+5 = 1003 (qqpart tu dis dans ton traitement si >1000 -> =1000
3 - 5 = 0 , pour un entier non signé

non ?

Adijo
Pat

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 16:59

le problème est justement le "qqpart tu dis dans ton traitement ..." j'aimerai tout faire en une requete (j ai réussi avec des if imbriqués mais si y a mieux je suis preneur)

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 22/05/2005 à 17:46

On ne peut pas encore mettre de RULES dans la version actuelle de mySQL ?

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 22/05/2005 à 18:32

En 1 req:

$hop=mysql_query("update table set champ1 = champ1 + $var where id = $id and champ1<100");
if(mysql_affected_row($hop)==0)
update table set champ1 = 100 where id = $id

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

aKennedy |
Membre

Photo de aKennedy

Inscrit le : 09/05/2005

# Le 22/05/2005 à 19:58

euh... ça fait pas 2 requêtes, ça ?

Francis HeaulmeOuvrir dans une nouvelle fenetre , JFKOuvrir dans une nouvelle fenetre et autres joyeusetés.

Fred | Frédéric
Modérateur

Photo de Fred

Inscrit le : 09/05/2005

# Le 22/05/2005 à 20:04

aK> Non, car la 2ème ne sera jamais exécutée, écrite comme ça

(en plus, à la Limit c'est pas si champ1 < 100, qu'il aurait fallu tester, mais si champ1 + $var <= 100)

"Le bois ne rend pas les coups"

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 22/05/2005 à 20:11

oui 2 requetes je pense aussi

et comme je suis pénible , il me faut gérer la borne inf et la borne sup en meme temps et sur 4 champs différents


Mais bon ce n'est pas grave, j'ai une solution avec des if imbriqués qui marche

Disons que j'aurai pouvoir mettre des contraintes sur la base pour avoir des requetes moins lourdes (au moins niveau relecture du code).

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 22/05/2005 à 20:23

Oui exact Fred

$hop=mysql_query("update table set champ1 = champ1 + $var where id = $id and champ1<100- $var");
if(mysql_affected_row($hop)==0)
update table set champ1 = 100 where id = $id

Il n'y a qu'une requete.

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

aKennedy |
Membre

Photo de aKennedy

Inscrit le : 09/05/2005

# Le 22/05/2005 à 20:45

Je crois que Fred indiquait qu'il manquait un mysql_query("");

Et donc si je compte bien, ça fait 2...

Francis HeaulmeOuvrir dans une nouvelle fenetre , JFKOuvrir dans une nouvelle fenetre et autres joyeusetés.

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 22/05/2005 à 21:03

non Fred n'indiquait pas du tout ca, mais tout simplement qu'il faut vérifier que champ1+$var < 100.

Avant de compter les requetes, regarde qu'il y a un if.

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 03/05/2024 7:19:01 | Généré en 8.92ms | Contacts | Mentions légales |