je renonce pour l'instant avec mon JOIN créer une vue pour des raisons de recherche - je besoin d'aide:/MySQL JOIN avec 3 tables et lignes vides
Voici mes tableaux:
Profils
id company user_id
1 ACME 2
2 Joe 4
3 Wolf 5
utilisateurs
id role_id online
2 4 2010-10-08
4 2 2010-10-08
5 4 2010-10-08
Rubrics
id title
1 Steel
2 Stone
3 Wood
Profiles_Rubrics
profile_id rubric_id
1 1
1 2
2 3
2 1
Ce que je veux obtenir de ces tables est une vue avec une ligne pour chaque profil - y compris aussi les profils qui ont aucune entrée dans le HABTM Profiles_Rubrics. Pour l'instant je ne peux obtenir les profils qui ont des entrées dans la table HABTM:
CREATE OR REPLACE VIEW Catalog_Branches AS
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles,
profiles_rubrics
JOIN rubrics ON profiles_rubrics.rubric_id=rubrics.id,
users
WHERE
profiles_rubrics.profile_id=profiles.id
AND profiles_rubrics.rubric_id=rubrics.id
AND users.id=profiles.user_id
AND users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id
Je l'ai essayé avec l'aide d'autres réponses ici à stackoverflow, mais ne peut pas arriver au point où il retourne tous les profils. Je ne suis pas un grand expert MySQL comme on pourrait le voir de tout ce qui précède :)
+1 Astander: ressemble le lien aux utilisateurs pourrait être une INNER JOIN sans supprimer les profils? – richaux
C'est génial et fonctionne comme prévu! Merci beaucoup! Je ne savais pas que vous pouvez avoir concaténé (?) JOINs comme vous l'avez fait. Et essayer par erreur est très difficile avec cette grosse requête :) Je vais maintenant l'appliquer à une autre VIEW que je crée! –
btw il y a une faute de frappe dans la clause WHERE: le premier ET va échouer la requête - ne sais pas si vous pouvez corriger cela pour les utilisateurs à venir en utilisant votre réponse. –