Décaler les enregistrement d'une table
Fermé
Mr.White
Messages postés
251
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 juillet 2012
-
29 juil. 2003 à 13:00
mussaka_eti Messages postés 8 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 13 mars 2008 - 10 mai 2007 à 16:53
mussaka_eti Messages postés 8 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 13 mars 2008 - 10 mai 2007 à 16:53
A voir également:
- Décaler les enregistrement d'une table
- Table ascii - Guide
- Table des matières word - Guide
- Décaler colonne excel - Guide
- Comment enregistrer une video youtube - Guide
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
10 réponses
nebulus
Messages postés
47
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2004
4
29 juil. 2003 à 16:38
29 juil. 2003 à 16:38
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
Jean-François Pillou
Messages postés
18306
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 juil. 2003 à 16:50
29 juil. 2003 à 16:50
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...
nebulus
Messages postés
47
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2004
4
29 juil. 2003 à 22:44
29 juil. 2003 à 22:44
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 ?
Jean-François Pillou
Messages postés
18306
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 juil. 2003 à 23:00
29 juil. 2003 à 23:00
Jamais de "order by" dans une clause UPDATE ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mr.White
Messages postés
251
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 juillet 2012
53
30 juil. 2003 à 10:56
30 juil. 2003 à 10:56
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)
BreTzeL
Messages postés
59
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
28 juin 2005
24
30 juil. 2003 à 12:06
30 juil. 2003 à 12:06
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?
Mr.White
Messages postés
251
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 juillet 2012
53
31 juil. 2003 à 11:49
31 juil. 2003 à 11:49
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)
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
31 juil. 2003 à 12:20
31 juil. 2003 à 12:20
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.
Mr.White
Messages postés
251
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 juillet 2012
53
4 août 2003 à 10:52
4 août 2003 à 10:52
Non, il n'y a pas vraiment d'algoithme puisque je récupère ce que l'utilisateur à mis.
En fait, on pourrai dire que ma clef sert également d'ordre.
Cette ordre n'est utilile que lors de l'affichache (ou presque).
En fait, on pourrai dire que ma clef sert également d'ordre.
Cette ordre n'est utilile que lors de l'affichache (ou presque).
mussaka_eti
Messages postés
8
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
13 mars 2008
8
10 mai 2007 à 16:53
10 mai 2007 à 16:53
je voudrais un cours en algorithme qui traite des enregistrements