J'ai 4 tables dans une base de données mysql existante d'un site de type répertoire. Tableau mt_links contient des informations de base pour chaque liste Tableau mt_cl contient qui liste ci-dessus est dans quelle catégorie (je veux seulement cat_id = 1) Tableau mt_cfvalues contient plus de détails pour chaque liste Il peut avoir répété les valeurs Tableau mt_images contient les noms d'image pour chaque liste.Récupérer des enregistrements de plusieurs tables certaines distinctes, d'autres non
Je veux tous les enregistrements de mt_links où le mt_cl cat_id = 1, et pour chacun de ces enregistrements, j'ai besoin de tous les enregistrements dans mt_cfvalues et cf_images correspondant à link_id.
J'ai mis en place un select avec les jointures Group_Concat et left, mais j'ai fini par répéter des valeurs dans mes résultats. J'ai ajouté Distinct, qui a guéri les valeurs répétées, mais mt_cfvalues peut avoir des enregistrements avec la même valeur, donc maintenant je manque une valeur que je devrais avoir.
SELECT a.link_id,
a.link_name,
a.link_desc,
GROUP_CONCAT(DISTINCT b.value ORDER BY b.cf_ID) AS details,
GROUP_CONCAT(DISTINCT c.filename ORDER BY c.ordering) AS images
FROM mt_links a
LEFT JOIN mt_cfvalues b ON a.link_id = b.link_ID
LEFT JOIN mt_images c ON b.link_id = c.link_ID
LEFT JOIN mt_cl d ON a.link_id = d.link_ID WHERE d.cat_ID = '1'
GROUP BY a.link_id
Je mis en place un SQLFiddle ici: http://www.sqlfiddle.com/#!2/f39e9/1
Y at-il un moyen plus facile? Comment résoudre le problème de répétition/non-répétition?
Qu'est-ce qui est censé se produire lorsque vous rencontrez une valeur répétée? – James
Les valeurs répétées de mt_cfvalues doivent être incluses dans mon résultat. Avis dans mon violon, Link ID 1 ... Dans la colonne Details il aurait fallu retourner "good, no cats, good" – DaveS