|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Bonjour,
Tout d'abord voici le schéma de ma base, j'ai 3 trois tables, dont une fait office de table de liaison: table "article": idArticle title content table "categorie" idCatgorie name table article_categorie: fk_idArticle fk_idCategorie Cette table de liaison me permet d'assigner plusieurs catégories pour un article. Pour récupérer mes articles, je fais un simple SELECT : Code :
SELECT idArticle, title, content FROM article... Mais maintenant, j'aimerais que ça me retourne la liste des articles, avec pour chaque article la liste des catégories assignées à cet article... Et là je ne sais pas comment faire... Une idée pour de l'aide? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#3 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Bonjour,
Merci pour votre réponse, j'ai essayer cela: Code :
Du coup je me pose une nouvelle question: Est-ce qu'il est possible que ça me retourne 1 ligne par article, avec 1 champ en plus "listCategorie" qui contient un genre de CONCAT() sur les catégories de mon article courant? Merci |
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Yeah! Merci, voici mon résultat:
Code :
PS: Il y a une erreur dans la FAQ, les deux derniers paramètres de la fonction GROUP_CONCAT() sont inversés. Merci pour l'aide. |
||
|
|
00
|
|
|
#6 | ||||
![]() ![]() |
INNER JOIN ne donne que les lignes qui ont une correspondance dans les deux tables
Exemple : Table A : id, txt 1, 'toto' 2, 'titi' 3, 'tata' 4, 'tutu' Table B : id, idA 1, 2 2, 3 3, 2 Code :
idA, txt, idB 1, 'toto', 3 2, 'titi', 1 3, 'tata', 2 => 'tutu' n'a pas de correspondance dans la table B et n'est pas retourné par la requête. LEFT JOIN donne toutes lignes de la table de gauche et la correspondance de données quand il y en a dans la table de droite, NULL quand il n'y en a pas. Code :
idA, txt, idB 1, 'toto', 3 2, 'titi', 1 3, 'tata', 2 4, 'tutu', NULL => 'tutu' n'a pas de correspondance dans la table B mais est retourné par la requête avec NULL dans la colonne issue de B.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Merci pour vos informations
Après avoir fait deux-trois test, un nouveau problème survient...si je prends ma requête et que je rajoute un WHERE: Code :
Est-ce possible toujours en une requête? ou une sous-requête? Merci |
||
|
|
00
|
|
|
#8 |
![]() ![]() |
Euh... là il va falloir que tu nous expliques plus concrètement ton besoin car c'est ou bien pour une catégorie ou bien pour plusieurs !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
J'explique:
J'ai une table qui contient des articles. J'ai une table qui contient une liste de catégories. J'ai une table de liaison, parce un article peut avoir plusieurs catégories. J'aimerais afficher une liste d'articles sous forme de liste tabulaire avec l'id de l'article, son titre, et les catégories de l'article: id article | titre article | catégories ---------- | ------------ | ------------ 1 | Titre 1 | Cat1, Cat2 2 | Titre 2 | Cat1, Cat3 3 | Titre 3 | Cat2 Mais j'aimerais aussi afficher cette liste suivant divers filtres, comme par exemple afficher tous les articles de la "Cat2", ce qui me donnerait ce résultat : id article | titre article | catégories ---------- | ------------ | ------------ 1 | Titre 1 | Cat1, Cat2 3 | Titre 3 | Cat2 Vous voyez le truc? Merci |
|
|
00
|
|
|
#10 | ||||
![]() ![]() |
Autrement dit, tu voudrais afficher tous les articles de la catégorie 2 et toutes les catégories de ces articles ?
GROUP_CONCAT s'utilise avec GROUP BY ! ![]() Évite la guerre des étoiles ! ![]() Il te faut une autre jointure sur la table associative pour récupérer toutes les catégories des articles de la catégorie 2. 1) Quelles sont les articles de la catégorie 2 ? Code :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#11 | ||||||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 117 ![]() |
Citation:
?? Citation:
Ça devient assez complexe, là. Je m'y perds un peu. Merci pour l'aide |
||||||
|
|
00
|
|
|
#12 | |||
![]() ![]() |
Citation:
Citation:
Citation:
La requête à utiliser est évidemment la seconde, la première n'étant qu'une étape intermédiaire et elle est incluse dans la seconde. À la première requête, j'ai ajouté une jointure vers la table associative pour récupérer toutes les catégories des articles de la catégorie 2. Si tu enlèves le WHERE, bien entendu, tu te retrouves avec tous les articles de toutes les catégories et comme il y a double jointure sur la table associative, tu as les résultats en double !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
Copyright © 2000-2012 - www.developpez.com