Rechercher : dans
Par :

[SQL] Update du champ id

Dernière réponse le 16 déc 2008 à 16:08:31 hektoumayo, le 23 mai 2005 à 20:52:39 
 Signaler ce message aux modérateurs

Bonjour,
Voila mon petit problème :
J'ai un table mysql dont le champ "primaire" "auto_incriment" se nomme "id". Je voudrais après suppression d'un champ de la table modifier le "id" pour que celui ci commence toujours à 1. Donc voici le script que j'ai réaliser :

$req="SELECT id FROM livredor";
$resultat=mysql_query($req) or die('ERREUR SQL :'.$req.'<br />'.mysql_error());

$val=mysql_fetch_array($resultat);
$i=1;
while($val) {
$query="UPDATE livredor SET id=' ".$i." ' ";
mysql_query($query) or die('ERREUR SQL :'.$query.'<br />'.mysql_error());
$i=$i+1;
}

Mais celui-ci ne marche pas. Il ne s'agit pas d'une erreur de syntaxe mai bel et bien d'une erreur de programmation.
Est ce que quelqu'un pourrai s'il vous plait m'indiquer l'erreur? Et surtout s'il existe une solution à ce problème.
Merci d'avance.

Meilleures réponses pour « [SQL] Update du champ id » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
SQL - Mise à jour d'informations VoirLe SQL permet la modification d'une table par un utilisateur (pour peu qu'il ait les droits suffisants...). La modification d'une table consiste à: ajouter des tuples modifier des tuples existants ou bien supprimer des tuples Insertion de...
SQL - Contraintes d'intégrité VoirExpression de contraintes d'intégrité Une contrainte d'intégrité est une clause permettant de contraindre la modification de tables, faite par l'intermédiaire de requêtes d'utilisateurs, afin que les données saisies dans la base soient...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...

1

sam3000, le 23 mai 2005 à 21:40:11

Le "update" en général est utilisé avec "where" pour cibler les enregistrements
UPDATE table SET champ=valeur WHERE condition

dans ton cas, je ne vois pas pourquoi tu veux "forcer" la valeur de "id" si tu l'as au préalable définis à "auto_increment".
c'est tout simplement INUTILE!

il te suffis lors de l'ajout d'un nouveau enregistrement d'utiliser la syntaxe:
INSERT INTO table (champs) VALUES (valeurs)

mais, dans les champs, tu ne met pas le champ "id", il sera mis automatiquement par MySQL!

donc tu ignore completement ce champ sauf lors de la selection d'un enregistrement bien précis dans un SELECT:
" SELECT * FROM table WHERE id='$id' "

sur ce, @+ L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

2

hektoumayo, le 23 mai 2005 à 22:02:53

Bon je pense que tu n'a pa bien compris ce que je voulais dire.
En fait , je voudrais creer un formulaire ds lequel je preciserez le numéro du message à supprimer. Ce numero correspond à l'id de ma table.
La suppression se passe très bien mais le problème c'est que lors de l'affichage de mon livre d'or a nouveau , le premier message du livre d'or a par exemple le numero 3 ( après avoir supprimé le premier et le deuxieme message) , ce qui est parfaitement débil puisqu'il est le premier !
Est ce que tu vois ce que je veu dire?

Répondre à hektoumayo

4

 SearchLab, le 16 déc 2008 à 16:08:31
  • +1

Dis moi hektoumayo j'ai le même problème que toi quelle solution as tu trouvé pour corriger ton problême (je sais le post est un peu vieux...)

Répondre à SearchLab

3

sam3000, le 23 mai 2005 à 22:36:14

Donc, la solution de ton probleme c'est lors de la suppression!
tu fait ton DELETE, et puis tu fais la commande:
" UPDATE livredor SET id=(id-1) WHERE id>='$id' "
ça decremente les "faux" numéros juste apres l'effacement L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000