Aller au contenu

Base de donnée MySQL - Pb champ id


Sujets conseillés

Posté

Bonjour,

ma table est un annuaire comportant les différentes coordonnées des membres. Le champ id est auto_increment.

Pb, pour le moment id s'ajoute à chaque nouvel entrée dans la table sans prendre en compte le nom. Je souhaiterais qu'il soit automatiquement recalculé à chaque entrée pour que la liste soit par ordre alphabétique... pour simplifier l'affichage de la liste des membres ensuite dans ma page php.

Merci

Posté

Bonsoir,

Euh... et si tu utilisait un clause ORDER BY ?

example :

SELECT * FROM table ORDER BY Nom ASC

Utilise ASC pour ascendant et DESC pour descendant...

Jette aussi un oeuil sur ce site : http://www.w3schools.com/sql/default.asp

ça risque de t'aider, surtout pour les fondamentaux...il y a de bons examples..

Posté

je l'utilise et pas de pb !

Ce que je souhaite c'est qu'il modifie la clef id de tous les membres à chaque fois que j'en rajoute un nouveau.

Exple : j'ajoute un enregistrement avec comme nom : BB. La table en comporte 20, il va donc donner à ce nouveau id=21.

BB par ordre CROIS du nom est entre les id 5 et 6.

Moi je veux qu'il donne à BB le id=6 et recalcule les id suivant en rajoutant un.

est-ce possible !?

Posté

oui c'est possible, mais pas très intelligent.

avec 20 enregistrements cela ira, mais imagine le travail a faire avec 1000 ... 10000 ?

tu surcharges ton serveur pour pas grand chose puisque la clause ORDER BY te donnera le résultat attendu au niveau de l'affichage!

Posté

pas de pb c'est un site perso pour mes amis, donc au max si j'attends 100 contacts ce sera pas mal !

Pourquoi !?

Très simple, pour l'affichage de mon annuaire. Dans mon script php j'utilise "WHERE nom BETWEEN 'AA' AND 'MM' ORDER BY nom" pour la page 1 par exemple.

Pb, quand je rajoute une entrée dans ma table, du genre BB, il faut que je modifie MM par NN pour avoir le bon nombre d'enregistrement affiché sur ma page, sinon ça coince en m'en faisant un de plus.

Alors que si je remplace le champ nom par id de 1 à 6 et bien plus de pb.

Tu pourrais me dire comment faire pour modifier l'id automatiquemen ?

Merci

Posté

Tellement logique que tu m'a perdu en route...j'ai beau relire ton post je ne comprends pas ce que tu souhaite faire, en espérant que d'autres plus réveillés y arrive :D

Bonne chance, reste que malgré de longues années de développements dans divers domaines je n'ai jamais eu besoin de modifier un ID ou tout une liste. On génère tellement de problème dans un SGBDR en faisant ce genre de chose que c'est vivement déconseillé, bien que possible.

Posté

MySql n'accepte pas (encore) les triggers il me semble.

De plus, tu provoquerais un travail énorme au niveau de la base de données alors qu'un simple order by marcherait très bien.

Posté

C'est très simple à faire mais tu ne pourras pas le faire avec un id autoincrémenté.

De plus ça n'a aucun sens de faire ça. Pour l'affichage, tu n'auras pas besoin de la valeur de l'id.

Si c'est pour les afficher dans l'ordre, tu utilises la clause ORDER BY. Si c'est pour afficher le numéro correspondant, tu n'as qu'à incrémenter une variable dans la boucle qui parcourt le résultat.

La DB ne doit pas forcément ressembler à ce que verra le visiteur. Tu travailles sur la représentation physique et non la présentation logique.

Concernant le nombre d'enregistrements que tu récupères, c'est du coté de la clause LIMIT qu'il faut te diriger.

Posté
MySql n'accepte pas (encore) les triggers il me semble.

<{POST_SNAPBACK}>

mySQL 5 le permet (bon ok personne est sur mysql 5 :P).

Posté

Moi j'ai tout compris ce qu'il a dit :fou:

Oui, tu dois te servir de LIMIT à la fin de ta requète SQL...

Quand tu veux afficher la liste des membres, tu mets

SELECT * FROM membre ORDER BY nom ASC LIMIT 0,20

- 0 est le début de la sélection (il prendra à partir du 1er enregistrement avec 0, si tu mets 10 il prendra à partir du 11e membre)

- 20 est le nombre d'enregistrements que tu veux prendre.

Avec cette requète tu pourras donc afficher les 20 premiers membres par ordre alphabétique... Si tu fais une deuxième page, tu mettras juste LIMIT 19,20 à la place..

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...