Page 1 sur 1

Echanger les id de deux champs

Posté : 09 août 2007, 16:18
par Benito
Bonjour,

Je souhaiterai, comme le titre du sujet l'indique, échanger les id de deux champs d'une même table mysql. L'objectif étant ensuite de modifier l'ordre des affichage des éléments de la table (j'utilise une requête du type "select * from table order by id")
Au départ j'avais pensé par modifier un des id pr le remplacer par le 2eme et vice versa. Le problème c'est que je me retrouve provisoirement avec deux champs avec le même id, ce qui est impossible si les id sont des clés primaires (donc uniques). De plus cela me fait 2 requêtes.

Est-ce qq'un aurait une idée pour régler mon problème (quitte à me proposer qqe chose de complètement différent; je suis ouvert à toute autre suggestion :) )
Merci d'avance

Posté : 09 août 2007, 16:22
par zeus
Alors, déjà, je vais te donner un peu de lecture sur [url=http://www.phpfrance.com/forums/voir_sujet-27678.phpla modification des id d'une table[/url]

Ensuite, pour préciser dans ton cas, comme dit dans l'article, un id ne devrait pas avoir une notion de présentation.
Si tu veux pouvoir modifier l'ordre de présentation des données de ta table, soit tu dois te baser sur un autre champs, soit créer un champ dédié à cet ordre d'affichage.

Posté : 09 août 2007, 16:41
par Benito
En effet la création d'un autre champ semble plus que nécessaire dans mon cas merci du conseil.
Sinon pour en revenir aux modifications proprement dites: y a-t-il une alternative à l'utilisation de 2 requêtes de type update pr modifier les valeurs de ces nouveaux champs dédiés à l'ordre d'affichage? (qqe chose comme une requete update capable d'effectuer les deux modifications simultanément par exemple; je n'a irien trouvé à ce sujet dans aucune doc).
J'ai un petit hébergement donc j'essaie autant que possible de trouver des moyens de réduire un maximum le nombre de mes requêtes, mais vu que je suis débutant ce n'est pas toujours évident...

Posté : 09 août 2007, 16:51
par zeus
Non, je pense que dans ton cas, il faut passer par 2 requêtes.

En plus, l'avantage de laisser les identifiants tranquille, c'est que tu peux suivre un algo de ce genre

Code : Tout sélectionner

récupérer id1 récupérer id2 récupérer position de l'enregistrement de id1 récupérer position de l'enregistrement de id2 modifier enregistrement de id1 pour donner position de id2 modifier enregistrement de id2 pour donner position de id1

Posté : 09 août 2007, 16:57
par Benito
Oui voilà je pense que je vais faire quelque chose de ce style.
Merci encore ;)

PS: vous pouvez considérez ce sujet comme "Résolu".

Posté : 09 août 2007, 17:00
par zeus
Très bien, je le note comme tel pour toi.

N'hésite pas à ouvrir un autre sujet si tu as des difficultés de mise en place ;)