Champs identique dans la même table MySQL-PHP

le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   1 011
 
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