sql : requête select MAX(champ) from table

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

sql : requête select MAX(champ) from table

Message le Jeu Oct 26, 2006 22:25

j'ai un problème :

je fais un select max sur un champ d'une table qui contient un grand nombre et celui ci me retourne -1


y a t-il une limitation de l'usage de cette fonction sql ? (en terme de stockage je pense..)


edit : une autre question au passage :?

un champ autoincrémenté : si on lui réafecte un numéro id qui à été supprimé, cela pose t-il problème à quelque chose/ quelque part ?

merci de votre aide j'en ai besoin,
je me casse la tête en ce moment :oops: :(

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Jeu Oct 26, 2006 23:04

apparement pour le max et/ou min c'est normal :

il prend -1 -2 etc...à partir du plus haut indice numérique de manière à ce que l'on soustrait pour trouver le résultat ... fallait le savoir..

si vous avez de la doc dessus je suis preneur, j'ai que pu constater en testant.


=> et pour l'histoire de l'auto incrémentation je veux bien que vous m'aiguillez...je sais qu'il y a des connaisseurs ici :)

merci d'avance


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Jeu Oct 26, 2006 23:29

tu ne peux pas renseigner un champ auto incrementé c'est justement le but de l'auto incrementation

rog

FlorentP
WRInaute discret
WRInaute discret
 
Messages: 145
Inscription: 25 Juin 2005

Message le Ven Oct 27, 2006 1:13

Bah si on peut réattribuer un champs même s'il y a un auto incrément dessus :?

Simplement faut faire gaffe à ne pas utiliser un nombre déjà utilisé, vu que l'autoincrément impose d'avoir une clef primaire (ou du moins unique) dessus je crois


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Ven Oct 27, 2006 1:58

c'est quoi ça comme réponse ?
8O

tu vas le dé auto incrémenter pour le renseigner ??

donc au moment au tu le renseigne il n'a plus l'attribut auto incrément ?

donc tu ne renseigne pas un champ auto incrémenté ?

@thierry

conseil de rog : on evite au maximum les requêtes delete, c'est la première source de corruption de table

rog

FlorentP
WRInaute discret
WRInaute discret
 
Messages: 145
Inscription: 25 Juin 2005

Message le Ven Oct 27, 2006 3:20

Bah la réponse à sa question.

Il n'y a pas de "dé autoincrementage" à faire, le champs n'est pas asservit à cet attribut "autoinscrement". L'auto inscrément c'est juste un truc qui te met un "MAX + 1" dans ton champs si tu ne lui précise pas de valeur particulière.

Donc si tu fait un insert avec la valeur "12", mysql va tenter de mettre la valeur 12. Si elle n'existe pas déjà, ça fonctionne, sinon, ça va planter parcequ'il y aura un pb de Duplicate entry sur la key qu'il y a sur le champs.
Et si tu met rien, usage classique d'une colonne avec l'autoincrément, mysql y met directement la valeur "MAX(colonne) + 1", et pas de problème

Edit : c'est valable en myisam, pour innodb je crois que c'est différent, à vérifier (juste pour l'histoire de la valeur insérée par l'auto inscrément)

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 6:59

ok donc ça c'est faisable, je le savais déjà plus ou moins, car j'ai fais des tests, en revanche ma question était plus posée dans le sens :

est-ce que cela peut poser problème ?

(par exemple dans l'index ? faut-il le remettre à jour ? quelque chose comme ça quoi, étant donné que l'on se ressert, dans mon cas, d'un id qui avait déjà été utilisé)

merci pour votre aide :wink:


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Ven Oct 27, 2006 7:20

thierry8 a écrit:ok donc ça c'est faisable, je le savais déjà plus ou moins, car j'ai fais des tests, en revanche ma question était plus posée dans le sens :

est-ce que cela peut poser problème ?

(par exemple dans l'index ? faut-il le remettre à jour ? quelque chose comme ça quoi, étant donné que l'on se ressert, dans mon cas, d'un id qui avait déjà été utilisé)

merci pour votre aide :wink:


Ca pose aucun problème, l'auto incrémentation reprend comme si tu n'avait rien inséré quand tu ne renseigne plus l'id

Exemple, tu as les id suivants: 1 - 2 - 4 - 5 - 7 - 8 - 9

tu insères dans ta base une ligne avec un id=3
Ta prochaine insertion sans renseigner l'id sera id=10
vu? ;-)

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 7:37

ok je préfère confirmer un truc :oops:


j'ai les enregistrements suivant :

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8

je supprime l'enregistrement 3

puis j'ajoute à nouveau un enregistrement et je reprend un id qui était déjà attribué, mais qui à été supprimé, donc l'id 3

cela ne créé pas de problèmes dans la bdd particulièrement avec l'index.

FlorentP
WRInaute discret
WRInaute discret
 
Messages: 145
Inscription: 25 Juin 2005

Message le Ven Oct 27, 2006 16:36

Non, pas de problème... d'ailleurs où voudrais-tu que ça pose problème ? :?

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 17:19

FlorentP a écrit:Non, pas de problème... d'ailleurs où voudrais-tu que ça pose problème ? :?

ouai, nan c'est clair je suis trop con !

<mode désolé : je suis complètement à la ramasse en ce moment, je vais faire une pose WRI : pas que WRI d'ailleurs>

merci à toi de m'avoir aidé.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité