Bonjour tout le monde,

Il me semblait possible d'insérer plusieurs clés primaires dans un même champs et les les récup après. Je m'explique:

j'ai une table avec plusieurs groupes (+ de 10) avec possibilité de supprimer et ajouter des nouveaux groupes.

et une table client dans laquelle j'ai une colonne nommée "foreignKey group" dans laquelle je place
la clé primaire du groupe auquel le client appartient. Seulement un client peut appartenir à plusieurs ou 1 seul groupe voir la totalité des groupes.

est-il possible de mettre plusieurs clés dans le même champs ? je pense pouvoir le faire avec php en mettant une virgule ou autre après chaque insertion et de les récup avec un explode mais bon je peux perdre beaucoup de temps dés qu'il y aura plus de 100 clients cela deviendra pénible il me semble ??
Bonjour,
Bien sur, et même pas dans l'ordre, par exemple ta clé pour l'un pourrait étre
"routard-heureux-voiture" et pour un autre
"heureux-routard-voilier"
en effet tu pourras rechercher toutes corespondance a l'aide de LIKE sur par exemple
"routard".
Je te laisses lire la doc sur LIKE Smiley confused
Pour des relations many to many comme dans ton cas, c-à-d un client peut appartenir à plusieurs groupes et un groupe contient plusieurs clients, la véritable bonne réponse est d'utiliser une table dite de liaison et la puissance des jointures.

Le coup de champs conjoints, p.ex. cle1, cle2, cle3, ... cleN, ou de champ unique contenant une string séparées par des virgules, ça peut marcher un moment, mais ça deviendra vite pénible quand il faudra récupérer la liste des clients appartenant à tel groupe, ou la liste des groupes auxquels appartient un tel client... sans parler des requêtes plus complexes qui ne tarderont pas à arriver. ET au niveau performances, ça va être terrible.

Tes tables pourraient se présenter comme suit :

create table clients (
cid int unsigned auto_increment,
name varchar(63) not null,
...
primary key(cid));

create table groups (
gid int unsigned auto_increment,
name varchar(63) not null,
...
primary key(gid));

create table clients_groups (
cid int unsigned not null,
gid int unsigned not null,
...
primary key(cid,gid));

Modifié par QuentinC (10 Jul 2013 - 08:24)