2013-06-08 1 views
1

J'ai un catalogue de musique avec des enregistrements. Chaque enregistrement a un propriétaire et un auteur. Les tables sont:mysql rejoindre alias même table

recordings 
recordings_authors(Fk rec_id, Fk contact_id) 
recordings_owners(Fk rec_id, Fk contact_id) 
contacts (name of people) 

L'écho final montrera:

Title: (name of title) 
Author: (name from contacts) 
Owner: (name from contacts) 

Les travaux suivants bien, sauf le propriétaire indique que le même contact que l'auteur. La suppression de l'auteur JOIN génère toujours l'erreur.

SELECT recordings.title,contactsauthors.name AS authorname,contactsowners.name AS ownername 
FROM recordings 

JOIN recordings_authors AS authors ON recordings.id=authors.rec_id 
JOIN contacts AS contactsauthors ON authors.rec_id=contactsauthors.id 

JOIN recordings_owners AS owners ON recordings.id=owners.rec_id 
JOIN contacts AS contactsowners ON owners.rec_id=contactsowners.id 

WHERE recordings.id=1 


$row=mysqli_fetch_assoc($results); 
echo $row['title'].'<h2>Credits</h2>Author: '.$row['authorname'].'<br>Owner: '.$row['ownername']; 

La meilleure réponse que je pouvais trouver ici est celui MySQL: How to associate a column alias with a specific JOIN clause

Répondre

1

Vous utilisez la mauvaise clé de votre contact avec joint. Vous devez utiliser contact_id au lieu de rec_id:

SELECT recordings.title,contactsauthors.name AS authorname,contactsowners.name AS ownername 

FROM recordings 

JOIN recordings_authors AS authors ON recordings.id=authors.rec_id 
JOIN contacts AS contactsauthors ON authors.contact_id=contactsauthors.id 
-- here ----------------------------------> ^^^^^^^^^^ 

JOIN recordings_owners AS owners ON recordings.id=owners.rec_id 
JOIN contacts AS contactsowners ON owners.contact_id=contactsowners.id 
-- here --------------------------------> ^^^^^^^^^^ 

WHERE recordings.id=1 
+0

Un grand merci chue x, cela a fonctionné parfaitement. En effet, seul le contact_id était incorrect. – user2422819