Page 1 sur 1

Inverser 2 ID

Posté : 09 août 2006, 14:37
par qmeuh
Bonjour à tous !

J'ai une liste d'article dans une base de données et je voudrais pouvoir faire "monter" un article dans ma liste.
En pratique cela consisterai à inverser les id de deux lignes dans MySQL :?

Cela est-il possible simplement ?
Sinon y a-t-il un autre moyen ?

Merci d'avance

Posté : 09 août 2006, 14:40
par zeus
Je suis un grand partisant de ne pas modifier les id d'une table.

Pour simplifier les choses, j'aimerais savoir comment sont triées tes enregistrements à l'affichage et je te conseille de plus chercher dans cette direction là ;)

Posté : 09 août 2006, 14:43
par qmeuh
Je les trie du plus récent au plus ancien grace à l'id ... c'est pour cela que ça me paraissait facil de simplement modifier les id :(

Posté : 09 août 2006, 14:48
par Tictac
Sauve les infos d'une des lignes puis efface là
change l'id de l'autre puis recrée celle sauvée en changeant son id !!

Barbare mais efficace

Posté : 09 août 2006, 14:48
par zeus
Il s'agissait donc d'une erreur de conception

Pour t'expliquer pourquoi je suis contre modifier les id, il se trouve que si tu utilise ces id dans d'autres tables, dès que tu modifies un id à un endroit, il faut les modifier dans toutes les tables dans lequel il apparait.

Même si aujourd'hui tu n'a pas de dépendance de ce type, rien ne te dit que ça ne sera pas le cas demain ...

Posté : 09 août 2006, 14:52
par qmeuh
Pour faire moins barbare il me suffit de créé une colone supplémentaire en utilisant la technique de Tictac si je comprend bien ?
Si c'est ça merci beaucoup :D mais c'est vrai que j'aurais du penser que je vais utiliser mes id ultérieurement ...

Encore merci :D

Posté : 09 août 2006, 16:03
par albat
Modifier les valeurs du champ id est une mauvaise solution.

Créer un nouveau champ ordre est une bonne solution.

Posté : 09 août 2006, 17:14
par leakcim51
Salut.

Ou alors tu ajoute un champ de type date et tu obtiens ton ordre directement en faisant un ORDER BY dans ta requete.

@+

Posté : 10 août 2006, 09:50
par Dom!
Tu ne peux pas dupliquer la ligne SQL tu obtiendra un nouvel ID et effacer l'ancienne ?

C'est une idée.... :idea:

Posté : 10 août 2006, 09:56
par zeus
Tu ne peux pas dupliquer la ligne SQL tu obtiendra un nouvel ID et effacer l'ancienne ?

C'est une idée.... :idea:
Ce que nous disons, avec Albat, c'est que c'est une mauvaise idée de changer les ID des lignes. Pas que c'est impossible ;)

Posté : 10 août 2006, 11:50
par Hubert Roksor
Juste histoire que ce soit clair, pour une fois je vais être un petit peu moins mesuré que mes collègues pour te dire que

ON NE MODIFIE JAMAIS JAMAIS JAMAIS UN ID DANS UNE TABLE !!

Désolé de ne pas détailler toutes les raisons de la choses, mais crois-nous sur parole il y a un jour où tu seras heureux de ne pas avoir touché à ce champs :]

Le mieux je pense est de suivre les conseils de leakcim51 et ajouter un champs de type DATETIME, ou encore un simple timestamp (que l'on peut obtenir en PHP avec la fonction time()) et de se servir de ce champs pour trier les résultats. En plus, ça te servira peut-être un de ces jours de savoir à quel moment tes enregistrements ont été postés. Voilà, bonne continuation ;)

Posté : 10 août 2006, 11:52
par zeus
Juste histoire que ce soit clair, pour une fois je vais être un petit peu moins mesuré que mes collègues pour te dire que
Merci Hubert :langue:
ça soulage, même si c'est quelqu'un d'autre ;)

Posté : 10 août 2006, 13:12
par pascaltje
je passais par là alors...

un id doit servir uniquement à identifier de manière unique un enregistrement. ça veut dire qu'il ne doit pas avoir le rôle supplémentaire de gerer un ordre.

il peut être un indice sur quand a été créé un certain enregistrement, mais ça reste vague.

ajoute un champ ordre et utilise le pleinement!

A+

Pascal