[Résolu]Relation m*n et tri - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [Résolu]Relation m*n et tri (/showthread.php?tid=2268) |
[Résolu]Relation m*n et tri - uriak - 10-01-2008 Je suis en train de coder mon édtieur de lexique pour le jeu, et je me retrouve donc avec une jolie relation m*n : chaque terme utilisé est lié à n autres termes, et ce afin d'afficher un sympatique "voir aussi..." Pour compliquer les choses, je vois la relation comme symétrique. J'ai donc une table T avec id et name pour les champs(on se fiche du reste) et une table L avec id_1 et id_2 qui vous le devinez jouent le rôle de clefs secondaires pour la table T et.. la table T Faire une recherche des articles liés n'est pas dur. Select * FROM T INNER JOIN L ON T.id=L.id_1 WHERE L.id_2 = "val" Encore que ceci ne me donne que la moitié des liaisons, donc première question, comment je cumule les deux sur une même requête ? En gros je veux aboutir à la liste des T.id et T.name correspondant à toutes les occurences d'une valeur soit dans L.id_1, soit dans L.id_2 On suppose que les choses sont bien faites donc que id_1 est toujours différent de id_2 et que deux couples opposés n'existent pas.. ce qui nous amène à la seconde question Dans mon éditeur je veux pour chaque article proposer la liste des articles auquel je pourrai le lier, c'est à dire tous les articles autres que lui-même, et pour lesquels il n'existe pas de couple L avec le premier article. en Php, il me faudrait retrouver la liste de tous les articles liés, et la retrancher à la liste des articles autres que celui en court. Est-ce que vous voyez moyen de faire cela dans une requête, pour l'élégance et la rapidité ? (je vais me pencher sur la question, mais je ne peux pas trop le faire en journée ^^) RE: Relation m*n et tri - pascal - 10-01-2008 ma proposition pour la requête : Code : SELECT * on fait le lien sur une table et la recherche sur l'autre, et l'inverse. A+ Pascal RE: Relation m*n et tri - uriak - 10-01-2008 Oui, en fait je crois que j'étais passé à côté de l'évidence.. et je suppose que pour le tri exclusif, Code : SELECT T.* La seule chose qui m'ennuie c'est le fait de générer une liste intermédiaire de taille m*n... peut être que de toute façon toute autre manière de procéder serait plus lente... Est-ce que l'utilisation des fonctions UNION and MINUS/INTERSECT pourrait apporter quelque chose ? RE: Relation m*n et tri - uriak - 10-01-2008 Pas d'autres remarques ? ^^ Dans l'absolu la solution m'a été donné, je mets donc le tag résolu RE: [Résolu]Relation m*n et tri - uriak - 10-01-2008 Bon en fait c'est pas résolu, du tout, c'est bon pour trouver toutes les tables liées, mais pas du tout pour trouver le complémentaire de cet ensemble, et là c'est le drame car je viens de lire que la commande SQL "MINUS" n'est pas encore implémentée en mySQL :'( EDIT : c'est résolu, voilà la syntaxe complète pour trouver tous les articles différents de $ID et non liés à lui : j'utilise des requêtes internes mais je pense quand même que récupérer la liste des champs liés et la soustraire à celle de tous les champs est plus rapide, à faire en php ? Code : SELECT id, name |