2010-09-29 3 views
1

Je suis relativement nouveau à MySQL et je ne sais pas comment écrire une requête dont j'ai besoin pour un de mes projets personnels.Aide à l'écriture d'une instruction SELECT

J'ai trois tables auxquelles il faut parler dans cette requête: books, tags et books_tags (table de jonction). La structure de base de ceux-ci est assez basique - les livres et les balises ont tous deux une colonne id et une colonne name (dans les livres, elle s'appelle 'title' et dans les balises elle s'appelle 'tags'). La table books_tags a book_id et tag_id.

Je veux être en mesure d'écrire une requête qui retourne quelque chose comme ça

TITLE  | TAG 
-------------------- 
BOOK ONE | PHP 
BOOK ONE | MYSQL 
BOOK ONE | OOP 
BOOK TWO | CSS 
BOOK TWO | HTML 
BOOK THREE | JAVASCRIPT 

Vous avez l'idée. Je faisais cela en utilisant des boucles PHP et des requêtes multiples, mais le nombre de requêtes est devenu très élevé très rapidement et est devenu un énorme gâchis. Je veux le garder mince et méchant.

+0

Aaghh, pas de boucles PHP! Préparez vos données autant que vous le pouvez dans MySQL. Le langage SQL a été conçu pour cela. – thomaspaulb

+0

Ouais. D'où la question. – Marcus

Répondre

4
select b.title, t.tag 
from books b 
inner join books_tags bt on b.id = bt.book_id 
inner join tags t on bt.tag_id = t.id 
order by b.title, t.tag 

Si vous voulez la liste des livres qui ne disposent pas des étiquettes aussi bien, vous pouvez le faire:

select b.title, t.tag 
from books b 
left outer join books_tags bt on b.id = bt.book_id 
left outer join tags t on bt.tag_id = t.id 
order by b.title, t.tag 
+0

Merci encore, RedFilter. La deuxième fois cette semaine, vous avez été capable de m'aider avec une question de recherche. Avez-vous un excellent livre MySQL que vous recommanderiez? Je suis vraiment impatient d'aller mieux. – Marcus