Champs identique dans la même table MySQL-PHP

Fermé
le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 - 14 sept. 2010 à 13:38
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 15 sept. 2010 à 12:14
Bonjour,


Mon projet et de refaire la gestion des clients d'une société, un client possède plusieurs commandes (pour simplifier je prendrais que cet exemple).

Il m'ont demandé de coder avec le Frameworks CakePHP, or ce dernier à des règles à respecter qui sont : la table doit avoir un champs "id" et pour la relation (exemple de la table commande) un champs "client_id".

Mon problème, la table commande comporte la clé primaire "id_com" je dois donc rajouter le champs "id" (car je peut pas renommer le champs 'id_com" problème de frontoffice).

Question :
- Comment faire pour que mon champs "id" soit égale à "id_com" lors de l'enregistrement d'une nouvelle commande? Car id_com est auto_incrémenté donc pas géré dans la requête.

Merci de votre aide.
A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 sept. 2010 à 12:14
Bonjour,

Je ne sais pas si cela marcherait sous MySQL, et d'ailleurs cela dépend vraisemblablement du moteur utilisé pour tes tables.

Mais sous SQL Server, je définirais tout simplement la nouvelle colonne de cette façon :

ALTER TABLE commande
ADD COLUMN id BIGINT DEFAULT id_comm

Ainsi, par défaut, la valeur de id est la même que celle de id_comm.
Il suffit donc de ne jamais spécifier le id que tu insères pour que la valeur par défaut soit utilisée. En plus, ça t'économises d'aller modifier toutes tes requêtes d'insertion ;)

Sinon, si cela ne fonctionnait pas, tu peux faire les choses en deux temps :
mysql_query("ta requête habituelle, sans id");
$nv_id = mysql_insert_id(); // Donne le dernier id auto incrémenté de la session en cours
mysql_query("UPDATE commande SET id=$nv_id WHERE id_comm=$nv_id");

Problème de cette deuxième méthode, je ne sais pas comment c'est géré s'il y a de nombreuses insertions simultanées dans ta base...

Xavier

PS : tiens, autre méthode si ton système fonctionne par batches, tu peux tout simplement décider de tout réaligner à intervalles réguliers :
UPDATE commande SET id=id_comm WHERE id IS NULL
0