A voir également:
- Décaler les enregistrement d'une table
- Table ascii - Guide
- Table des matières word - Guide
- Décaler une colonne excel - Guide
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Table des caractères - Guide
10 réponses
hello,
Y'a moyen avec un curseur qui parcours ta table à l'envers et tu fais donc ton update au moyen du curseur et ce dans l'ordre spécifié. Si tu as besoin de plus d'infos là-dessus, n'hésites pas, je te les fournis. ;-)
Mais un update de la clef, en principe, c'est pas trop recommandé. Tu es sûr que c'est nécessaire ?
@+
Nebulus
Y'a moyen avec un curseur qui parcours ta table à l'envers et tu fais donc ton update au moyen du curseur et ce dans l'ordre spécifié. Si tu as besoin de plus d'infos là-dessus, n'hésites pas, je te les fournis. ;-)
Mais un update de la clef, en principe, c'est pas trop recommandé. Tu es sûr que c'est nécessaire ?
@+
Nebulus
Je pense qu'à la base c'est une mauvaise idée de modifier les ID de cette façon. Que cherches-tu à faire exactement ? Quelle est la motivation de ce choix ?
Si c'est pour insérer un enregistrement entre deux autres, comme par exemple dans ce forum pour insérer un post au milieu, tu as d'autres façons de faire... Sinon tu perds tout l'intérêt de la base de données ! Arrivé à 10 000 enregistrements, tu seras obligé de faire un update sur plusieurs milliers d'entre eux à chaque insertion !
Je pense qu'il est sûrement plus opportun de faire un autre champ et de faire un "order by" sur ce champ. Ce champ pourra être quelque chose du genre 1, 2, 3, 4, ... puis lorsque tu insères un champ après 2, il suffira de mettre 2.1, ...
Sinon par récursivité en faisant un champ "Parent", dans lequel tu mets l'ID du père...
Si c'est pour insérer un enregistrement entre deux autres, comme par exemple dans ce forum pour insérer un post au milieu, tu as d'autres façons de faire... Sinon tu perds tout l'intérêt de la base de données ! Arrivé à 10 000 enregistrements, tu seras obligé de faire un update sur plusieurs milliers d'entre eux à chaque insertion !
Je pense qu'il est sûrement plus opportun de faire un autre champ et de faire un "order by" sur ce champ. Ce champ pourra être quelque chose du genre 1, 2, 3, 4, ... puis lorsque tu insères un champ après 2, il suffira de mettre 2.1, ...
Sinon par récursivité en faisant un champ "Parent", dans lequel tu mets l'ID du père...
Je ne peux qu'appuyer à 100%.
C'était bien en substance ce qui se cachait derrière "Tu es sûr que c'est nécessaire ?" ;-))
@+
C'était bien en substance ce qui se cachait derrière "Tu es sûr que c'est nécessaire ?" ;-))
@+
Sinon, juste par curiosité...
Et si ta requête tu la changeais en
UPDATE tatable SET id = id + 1 WHERE id > 3 ORDER BY id DESC
Ca marcherait ?
Et si ta requête tu la changeais en
UPDATE tatable SET id = id + 1 WHERE id > 3 ORDER BY id DESC
Ca marcherait ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En faite, ce que je cherche à faire un inserant une enregistrement entre deux autres est de garder un ordre car lors de l'affrichage je reprend l'ordre des id, il me fallait donc changer l'ordre de ces dernier lors de l'insertion d'un enregistrement.
Je comprend trés bien que ce n'est pas la meilleur solution mais sur le cout je n'avais pas pensé que s'il y avait 10 000 enregistrement ca commencerai à être vraiment lourd, mais bon, en réalité il ne peut y avoir plus de 100 enregistrement (et je doute que ca ateigne cette valeur) donc finalement je pense que je peut me permettre ce petit écart.
J'ai donc réussi à résoudre mon problème avec ce code :
for($i=$nb_enreg-1;$i>=$id_table;$i--)
{
$requette_decal = "UPDATE $nom_table SET $nom_id_table = $i + 1 WHERE $nom_id_table = $i";
echo '<br><br>'.$requette_decal.'<br>';
$resultat_requette_decal = mysql_query($requette_decal, $db_insertion) or die('erreur lors du décalage des enregistrements.<br>Erreur : '.mysql_error());
}
PS: si vous avez d'autre proposition où que quelque chose dans ce code ne va pas ... Corrigé moi, merci !
;o)
Je comprend trés bien que ce n'est pas la meilleur solution mais sur le cout je n'avais pas pensé que s'il y avait 10 000 enregistrement ca commencerai à être vraiment lourd, mais bon, en réalité il ne peut y avoir plus de 100 enregistrement (et je doute que ca ateigne cette valeur) donc finalement je pense que je peut me permettre ce petit écart.
J'ai donc réussi à résoudre mon problème avec ce code :
for($i=$nb_enreg-1;$i>=$id_table;$i--)
{
$requette_decal = "UPDATE $nom_table SET $nom_id_table = $i + 1 WHERE $nom_id_table = $i";
echo '<br><br>'.$requette_decal.'<br>';
$resultat_requette_decal = mysql_query($requette_decal, $db_insertion) or die('erreur lors du décalage des enregistrements.<br>Erreur : '.mysql_error());
}
PS: si vous avez d'autre proposition où que quelque chose dans ce code ne va pas ... Corrigé moi, merci !
;o)
salut.
perso, je pense que ca fait beaucoup de requetes pour une simple insertion. tu ne pourrais pas trouver un autre critere de tri? un autre champ comme deja proposé au dessus?
perso, je pense que ca fait beaucoup de requetes pour une simple insertion. tu ne pourrais pas trouver un autre critere de tri? un autre champ comme deja proposé au dessus?
En faite, je croit que la récursivité serai la meilleur solution mais comme je n'aurai jamais plus de 100 enregistrement je croit que je peut me permettre ce petit écart.
Et puis c'est compliqué la récursivité... ;o)
Et puis c'est compliqué la récursivité... ;o)
Hello,
Je ne vois pas fort l'intérêt de ta manip.
Un ID sert en général à effectuer un lien vers une autre table.
(ou alors c'est que tu ne fais pas de bdd relationnelle).
Tu n'as pas un autre critère de tri?
( l'emplacement où tu "insère" le t-uple,tu dois bien le déterminer à l'aide d'un algorithme quelconque non?)
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
Je ne vois pas fort l'intérêt de ta manip.
Un ID sert en général à effectuer un lien vers une autre table.
(ou alors c'est que tu ne fais pas de bdd relationnelle).
Tu n'as pas un autre critère de tri?
( l'emplacement où tu "insère" le t-uple,tu dois bien le déterminer à l'aide d'un algorithme quelconque non?)
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.