Je crée des lignes dans ma base de données et il se peut que je décide par le biais du php d'en éliminer une.
HIC ! À ce moment là, je me retrouve avec une liste d'ID du genre : 1, 2, 3, 5, 6, ...
Ceci me cause des soucis pour l'analyse des lignes de la BD par ma page php. Adapter un code à ça serait impossible en imaginant que je puisse supprimer plusieurs lignes consécutives ce qui générerait un énorme GAP entre un ID et un Autre.
S'il ne tenait qu'à afficher dans un certain ordre les lignes, ça va, mais je soucis c'est que je veux pouvoir déplacer ces lignes. Autrement dit, qu'une ligne d'ID 2 passe à 3 et donc que la 3 passe à 2.
Si après suppression de plusieurs lignes je me retrouve avec un séquence comme : 1, 2, 5, 6, 8, ... et que je veux faire passer ma ligne 3 en position 2, il me faudra faire la manipulation (ID-1) à trois reprises ou plus si la séquence présente un trou plus grand encore . Une fois ça va mais si je veux par la suite passer la ligne 4 à la ligne 3 et la 3 à la ligne 4 j'aurais encore le même soucis et ainsi de suite...
Alors voilà : Est-il possible de faire en sorte que la BD range et ré-arrange les ID automatiquement de sorte à ce que les valeurs se suivent ?
Si ce n'est pas possible, que pourriez-vous me conseillez-vous de faire pour palier à ce soucis ?
Si je ne me trompe pas, il y a un bouton dans PHPMyAdmin qui permet de faire cela, mais je ne me rappel plus comment il s'appelle, je vais aller voir et je te tient informé si je le retrouve...
Edit : Non testé
La section "Ordonner la table par " tu sélectionne ton ID. puis croissant et tu valide.
Tu as également la case "AUTO_INCREMENT" un peu plus bas qui contrôle la prochaine valeur de ton ID, a la prochaine incrémentation.
En espérant avoir pu t'aider.
Edit 2 : Après test, cela arrange la table dans l'ordre croissant, mais ca ne remplit pas les "trous" des ID. Désolé.
- Edité par AnthonyMew 27 mars 2015 à 18:22:24
Il existe 10 types de personnes dans le monde, ceux qui comprennent le binaire... et les autres !
Effectivement, je viens de tester de mon côté et je me disais la même chose.
Je pense peut-être que c'est quelque chose que je devrais faire manuellement (Comment je sais pas encore mais je trouverais sur le net).
Quelque chose dans le genre lecture des lignes par ordre croissant, et incrémentation d'une variable appart et lorsque l'id de la ligne ne correspond pas à la variable, changer l'ID.
Mais après l'AI ne se mettrait pas à jour et continuerait à partir d'une valeur qui sera loin de la valeur adéquat.
Je guette toujours si quelqu'un aurait une option mystère
Essayer de maîtriser la numérotation d'une clé primaire d'une table n'est pas une bonne chose ... La clé primaire n'est pas là pour représenter un ordre une une information, mais UNIQUEMENT pour assurer l'unicité d'un enregistrement et sa référence éventuelle dans d'autres tables (clé étrangère).
Si tu as besoin de gérer un ordre, comme cela semble être le cas, alors l'ajout d'une colonne ordre ou la gestion d'un id_precedent me paraît plus approprié ...
Alors j'en suis conscient, et pour preuve, j'avais déjà crée une colonne pour l'Ordre :
Mais au final, modifier la colonne ID ou ORDRE, en ce qui me concerne ne change rien. J'ai parler d'ID pour que ce soit plus facile de visualiser ce que je voulais faire.
Après, est-ce qu'il existe une option que ne devrait pas s'appliquer à une clé primaire que l'on pourrait appliquer à une colonne normale ?
Tu vas récupérer tes enregistrements dans l'ordre que tu veux non ?
Si au lieu d'afficher 2, 6, 18, 55, 105 (car plusieurs enregistrements ont été supprimés) tu veux afficher 1,2,3,4,5, alors pourquoi ne pas gérer cela à l'affichage (en PHP par exemple) ?
Je ne peux pas faire comme cela car ce n'est pas juste de l'affichage en fait.
Je dois rafraîchir une page qui va chercher le contenu de la BD à chaque fois.
Je veux pouvoir modifier l'ordre des lignes mais comme je vais les chercher à chaque fois dans la base de données par le refresh, si elles ne sont pas rangées selon une colonne de la BD, elle ne changeront pas d'ordre à l'affichage.
Or, si j'ai une suite comme 2, 6, 18, 55 et que je veux que ma ligne 55 soit définie comme étant avant la ligne 3 (correspondant au 18), il faudrait ramener ce 55 à 17.
Maintenant, ma page php elle ferait ORDRE -1 (et la ligne qui correspond à ORDRE - 1, attribuer ORDRE = ORDRE + 1) à chaque clique/Refresh donc il me faudrait un max de click avant d'arriver à 17.
Tandis que si (Exemple) je peux faire qu'une colonne s'écrive dynamiquement en l'associant au nº de la ligne de la table de la BD, alors mon problème serait réglé.
En fait, s'il pouvait exister une colonne type ROWNUM qui est établie par MySQL et que l'on puisse modifier, je n'aurais plus de soucis.
Cependant, il semblerait que MySQL soit le seul à ne pas avoir ce ROWNUM.
Et bien je peux mettre à jour la colonne ORDRE en base mais ce que je ne sais pas c'est comment, pour faire en sorte de respecter l'ordre que je souhaite, en omettant les trous qu'ils peut y avoir dû à la suppression d'une ou plusieurs autres lignes.
Actuellement, j'ai à chaque ligne affichée sur ma page php dans une tableau une colonne dans laquelle se trouve deux boutons :
1- Monter
2- Descendre
S'il n'y a pas de trous, c'est ok. En appuyant sur monter à la ligne 3, j'actualise ma base de données de la sorte :
valeur de ORDRE de la ligne 3-1 = 999;
valeur de ORDRE de la ligne 3 = 2;
valeur de la ligne 999 = 3;
Mais si j'ai des trous, ça donne cela : On va dire Monter la ligne 3 d'ORDRE 17 à la ligne 2 d'ORDRE 12.
Valeur de ORDRE de la ligne 17-1 = 999
valeur de ORDRE de la ligne 17 = 17-1;
valeur de la ligne 999 = 17;
Ok... en fait ça fonctionnerait U_U mais après aucune suite logique dans tous les nombres. Mais ça je m'en fous un peu vu que je ne les affiche pas.
EDIT1: Il y a bien un soucis qui est que la ligne 17-1 n'existe pas.
Bon et bien je tente comme ça pour voir. Je reviens vers vous si quelque chose ne va pas ou si tout va bien
Il existe 10 types de personnes dans le monde, ceux qui comprennent le binaire... et les autres !