doudy Posté 1 Avril 2008 Partager Posté 1 Avril 2008 (modifié) Oups, je me suis trompé de rubrique, merci de me déplacer vers la rubrique SQL . Merci Bonjour, Voila mon petit problème de mysql/php : J'ai deux tables : membres et territoires. La contrainte est qu'un membre peut avoir plusieurs territoires et qu'un territoire peut avoir plusieurs membres. Ce qui donne des relations N à N de chaque côté. Je dois donc créer une table de liaison (membres_territoires) qui va contenir les clés primaires des tables membres et territoires. Pratiquement, chaque membre s'enregistre et choisit un ou plusieurs territoires qui lui sont proposés. Un membre peut également mettre à jour sa fiche en ajoutant / supprimant des territoires. Je me demande comment gérer au plus simple la mise à jour de la table de liaison (membres_territoires) ? Dois-je à chaque mise à jour faire une boucle de recherche du couple id_membres/ id_territoires dans le table de liaison pour le supprimer ou l'ajouter ? Ou bien existe-il une commande MySql qui fait ce travail automatiquement ? Je vous remercie d'avance pour les pistes que vous pourriez me donner Doudy Modifié 1 Avril 2008 par doudy Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tizel Posté 1 Avril 2008 Partager Posté 1 Avril 2008 Pour l'ajout, tu n'a pas le choix... Il faut que tu ajoute toutes les laisons une à une. Pour la supression, dans les bases de données, tu as la contrainte "ON DELETE CASCADE" qui permet de supprimer toutes les liaisons qui concerne un membre ou un territoire que tu supprime. Tizel Lien vers le commentaire Partager sur d’autres sites More sharing options...
doudy Posté 1 Avril 2008 Auteur Partager Posté 1 Avril 2008 Merci Tizel pour l'info ... ... mais pour utiliser les contraintes de clés étrangères FOREIGN KEY et ON DELETE CASCADE ... je dois passer mes tables de MyiSAM en InnoDB. Est-ce que je vais perdre en perf et en espace d'occupation ? Devrais-je retoucher mon code sql qui marchait bien en MyiSAM ? Bref, est-ce que le passage en InnoDB. se fait sans douleur ? Merci d'avance. Doudy Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 1 Avril 2008 Partager Posté 1 Avril 2008 Hello, si tu es limité à MyIsam, tu peux envisager l'utilisation de triggers faisant (partiellement) la même chose. A condition d'avoir une version récente de MySQL (5.1.x je crois, mais à vérifier). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 1 Avril 2008 Partager Posté 1 Avril 2008 Dois-je à chaque mise à jour faire une boucle de recherche du couple id_membres/ id_territoires dans le table de liaison pour le supprimer ou l'ajouter ? wacko.gifOu bien existe-il une commande MySql qui fait ce travail automatiquement ? Ce que tu peux faire (et c'est la solution que j'utilises en général) > delete from membre_territoire where membre_id =xxx pour chaque territoire : > insert into membre_territoire values xxx, yyy Autrement dit, dans ta table de liaison, tu vires tout ce qui concerne 'ce' membre, puis ensuite tu mets tout ce qu'il a coché. Ton insert dans la table de liaison peut se faire en une seule fois > $q = "insert into membre_territoire (id_membre, id_territoire) values ";foreach($_post['territoire'] as $k => $v) $q .= " ('".$id_membre."', '".$v."'), "; $q = substr($q, 0,-2);mysql_query($q); de tête, sans tester.. Vérif. le 'post' évidemment, mais c'est à peu près ca Nico. Lien vers le commentaire Partager sur d’autres sites More sharing options...
doudy Posté 1 Avril 2008 Auteur Partager Posté 1 Avril 2008 Merci Nico, Ta solution est simple et facile à implémenter, surtout que sur mon serveur mutualisé je ne peux pas utiliser les triggers et autres trucs trop pointus Je vais essayer cette méthode ... Merci encore. Doudy Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant