2015-08-25 3 views
0

fondamentalement afin de traiter les choses rapidement, je dois être en mesure d'accéder à l'information à partir de deux tables liées par un intermédiaire atteint par un à plusieurs, puis une relation plusieurs à plusieurs . Plus précisément, j'ai, les tableaux pertinents suivantsSQL un à plusieurs, plusieurs à plusieurs, requête Build

utilisateurs [id ...]

voyages [user_id ...]

trip_type [id, trip_id, type_id]

types [ id, ...]

Par exemple, les utilisateurs ont de nombreux voyages qui ont de nombreux types qui eux-mêmes ont de nombreux voyages.

Mon but est d'obtenir une liste de tous les identifiants de type (avec des répétitions si elles se produisent) associés à un utilisateur particulier par chaque trajet qu'ils ont pris.

Je suis sûr que cela est trivial à l'inclinaison SQL, mais je ne suis pas l'un de ces individus et en tant que tel, je suis juste d'écrire un non-sens à ce stade.

Répondre

0
select users.id, trip_type.type_id, count(*) from users join trips on trips.user_id = users.id join trip_type on trips.id = trip_type.trip_id group by users.id, trip_type.type_id 

Cela vous permettra également de connaître le nombre de voyages de chaque type effectués par un utilisateur. Cette requête ne répertorie pas les utilisateurs qui n'ont effectué aucun voyage. Si vous avez besoin de ces utilisateurs et changer le mot « rejoindre » à « jointure gauche »

+0

Est-ce vraiment correct, il n'y a pas de trips.type_id? (myPHPadmin ne l'aime pas non plus) – Richard

+0

Non, désolé raté un tableau, j'ai édité la réponse, essayez-le et faites le moi savoir. Cela peut ne pas être 100% car je n'ai pas de base de données avec cette structure à tester. – dinomix

+0

Cela fonctionne très bien. – Richard

0
SELECT tt.type_id, u.user_id, tr.id 
FROM trip_type tt 
INNER JOIN trips tr ON tr.id = tt.trip_id 
INNER JOIN types ty ON ty.id = tt.type_id 
INNER JOIN users u ON u.id = tr.user_id 
WHERE u.user_id = ? 

Cela renverra type_ids, user_id et ids de voyage pour un utilisateur particulier.