Exploiter les données d'une table de liaison

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Exploiter les données d'une table de liaison

par Ferdinand » 18 mars 2007, 21:37

Salut !

Merci pour cette réponse :)

Je vois pas la différence entre le premier et le deuxième problème, si ce n'est que ce ne sont pas les mêmes mots-clés :roll: :?:
Et ce n'est pas le même opérateur non plus : OU dans le premier problème (qui est résolu) et ET dans le second.

Dans le deuxième cas je cherche les idlivres qui ont les deux mot-clés : "présence" (1) ET "vigne" (5) (et non l'un ou l'autre de ces mots-clés).

J'ai tenté ceci :

Code : Tout sélectionner

SELECT distinct li.id_livre FROM livres li LEFT JOIN liaison ls ON (ls.idlivre = li.id_livre ) where ls.idmotcle in (1 AND 5);
Il me répond : ce qui est correct mais si je change les valeurs de mots-clés, par exemple "bas-côté" (2) ET "vigne" (5) :

Code : Tout sélectionner

SELECT distinct li.id_livre FROM livres li LEFT JOIN liaison ls ON (ls.idlivre = li.id_livre ) where ls.idmotcle in (2 AND 5);
Il me répond toujours : alors que c'est qui est attendu, donc ma requête est fausse :cry: .



Au passage, EasyPHP est un package contenant Apache, MySQL, PHP et phpMyAdmin. phpMyAdmin est une interface pour MySQl, c'est tout.

Une vraie info utile pour un problème lié au base de données/SQL est la version du SGBD, ici MySQL. Ici à la rigueur, celle de easyPHP, qui permet de retrouver celle de MySQL. Mais la version de phpMyAdmin n'a aucun impact sur tes requêtes.
Ok, merci pour la précision.

.

par ouckileou » 18 mars 2007, 21:08

Je vois pas la différence entre le premier et le deuxième problème, si ce n'est que ce ne sont pas les mêmes mots-clés :roll: :?:

Tu as bien modélise les tables, en utilisant une table de relation, mais pourquoi ne pas manipuler directement les chaînes recherchées, plutôt que les indices ? C'est un peu l'intérêt d'une bdd :

Code : Tout sélectionner

SELECT li.id_livre FROM livres li INNER JOIN liaison ls ON li.idlivre = ls.id_livre INNER JOIN mots-cles mc ON ls.IDMOTCLE = mc.ID_MOTCLE WHERE mc.MOTCLE = 'krach' OR mc.MOTCLE = 'zouave'
J'ai mis ici INNER JOIN, puisque tu veux les livres qui ont des relations dans la table liaison et mots-clés à chaque fois, la jointure gauche sert à obtenir toute les lignes même celles qui ne satisfont pas la condition de jointure.
(au cas où, je travaille pour l'instant avec Easyphp et phpMyAdmin 2.5.3)
Au passage, EasyPHP est un package contenant Apache, MySQL, PHP et phpMyAdmin. phpMyAdmin est une interface pour MySQl, c'est tout.

Une vraie info utile pour un problème lié au base de données/SQL est la version du SGBD, ici MySQL. Ici à la rigueur, celle de easyPHP, qui permet de retrouver celle de MySQL. Mais la version de phpMyAdmin n'a aucun impact sur tes requêtes.

A moitié résolu

par Ferdinand » 18 mars 2007, 00:17

Je ne pouvais pas aller me coucher sans chercher un peu :)

J'ai complétement modifié ma requête et ça marche pour la première partie de mon problème (obtenir les livres dont les mots-clés sont "krach" (6) OU "zouave" (14) )

Code : Tout sélectionner

SELECT distinct li.id_livre FROM livres li LEFT JOIN liaison ls ON (ls.idlivre = li.id_livre) WHERE ls.idmotcle = 6 OR ls.idmotcle = 14

Ca me retourne bien

Code : Tout sélectionner

3 5 7 9
comme attendu.

(pourquoi suis-je allé me fourrer dans un group by et un having ? Je vous le demande ! )

Je continue mes recherches pour le reste demain mais vous pouvez quand même m'aider hein ! :D

Exploiter les données d'une table de liaison

par Ferdinand » 17 mars 2007, 23:39

Salut !

J'ai un souci avec des tables de liaison... Non pas pour les renseigner mais pour exploiter les données, j'imagine que c'est très classique hélas je n'ai pas trouvé de solution pour l'instant (si , si, j'ai cherché ! :) ).


Soit trois tables : LIVRES, MOTS-CLES, LIAISON

Les tables :

Code : Tout sélectionner

LIVRES : ID_LIVRE TITRE 1 Les bas de hurlevent 2 Tentacule 3 Le cri des agneaux 4 Le sarment des limbes 5 Le jeudi noir à la bourse 6 MySql si facile ! 7 Mais acces est tellement mieux ! ! ! 8 MySql en 10 leçons 9 Acces en 184 leçons MOT-CLES : ID_MOTCLE MOTCLE 1 présence 2 bas-côtés 3 mélanome 4 méchoui 5 vigne 6 krach 7 requêtes 8 merise 9 clé 10 pythagore 11 cardinalité 12 turquie 13 banque 14 zouave LIAISON : IDLIVRE IDMOTCLE 1 1 1 2 1 5 2 1 2 3 2 4 2 5 3 2 3 5 3 9 3 12 3 14 5 6 5 13 6 7 7 6 7 7 8 11 9 6 9 14


Comment je fais pour choisir les livres dont les mots-clés sont "krach" (6) OU "zouave" (14) ?

J'ai essayé :

Code : Tout sélectionner

Select idlivre, idmotcle from liaison group by idmotcle having ((idmotcle = 6) or (idmotcle = 14))
Je m'attendais à :

Code : Tout sélectionner

3 5 7 9
Il me retourne :

Code : Tout sélectionner

3 5

Autre question :

Et si je veux les livres qui ont comme mots-clés "présence" (1) ET "vigne" (5) ?

J'ai essayé :

Code : Tout sélectionner

Select idlivre, idmotcle from liaison group by idmotcle having (idmotcle = 1) and (idmotcle = 5)
Je m'attendais à : mais je n'ai pas eu de réponse :-(

( pour ce second point je m'y attendais un peu car le champ idmotcle d'un enregistrement ne peut contenir à la fois les valeurs 1 et 5... Mais j'ignore comment écrire la requête pour qu'elle retourne plusieurs enregistrements)


Je dois être très loin du compte...


Si vous pouviez me donner des pistes...

(au cas où, je travaille pour l'instant avec Easyphp et phpMyAdmin 2.5.3)


Merci d'avance :?