Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Rozwiązany][MySQL]Zagnieżdżone zapytanie?
robos85
post
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Mam problem jak napisać zapytanie.
Mam:
tabelę utwory (id, nazwa)
tabelę utwor_instrument (id, utwor_id, instrument_id)
tabelę instrumenty (id, nazwa)

W 1 zapytaniu chciałbym pobrać listę wszystkich utworów wraz z instrumentami. Jak mam takie zapytanie skonstruować? Zapewne jako śJOIN użyć ale nie mam pomysłu jak.

Ten post edytował robos85 25.11.2009, 17:21:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
robos85
post
Post #2





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


  1. SELECT `m`.*, `u`.`username`, `m2i`.`instrumentid`, GROUP_CONCAT(i.instrument) AS `instrumentslist`, `tl`.`length`
  2. FROM `s4b_musicfiles` AS `m`
  3. LEFT JOIN `s4b_users` AS `u` ON m.userid = u.id
  4. LEFT JOIN `s4b_music2instrument` AS `m2i` ON m.id = m2i.musicid
  5. LEFT JOIN `s4b_instruments` AS `i` ON i.id = m2i.instrumentid
  6. LEFT JOIN `s4b_tracklength` AS `tl` ON m.length = tl.id
  7. WHERE (accepted ='1')
  8. GROUP BY `m`.`id`

Z tego co widzę działa tak jak chciałem. Do dziś nie słyszałem o funkcji GROUP_CONCAT (IMG:style_emoticons/default/smile.gif)

Dzięki za pomoc:)

EDIT:
Odświeżam, żeby zapytać jeszcze o kolejną rzecz. Tamto zapytanie było OK, dodałem do niego podobna formułę dla 2giej tabeli - nastrój. Zapytanie wygląda teraz tak:
  1. SELECT `m`.*, `u`.`username`, `m2i`.`instrumentid`, GROUP_CONCAT(i.instrument SEPARATOR ', ') AS `instrumentslist`, `m2m`.`moodid`, GROUP_CONCAT(mo.mood SEPARATOR ', ') AS `moodlist`, `tl`.`length`
  2. FROM `s4b_musicfiles` AS `m`
  3. LEFT JOIN `s4b_users` AS `u` ON m.userid = u.id
  4. LEFT JOIN `s4b_music2instrument` AS `m2i` ON m.id = m2i.musicid
  5. LEFT JOIN `s4b_instruments` AS `i` ON i.id = m2i.instrumentid
  6. LEFT JOIN `s4b_music2mood` AS `m2m` ON m.id = m2m.musicid
  7. LEFT JOIN `s4b_mood` AS `mo` ON mo.id = m2m.moodid
  8. LEFT JOIN `s4b_tracklength` AS `tl` ON m.length = tl.id
  9. WHERE (accepted ='1')
  10. GROUP BY `m`.`id`


I w wynikach jest teraz pomieszane. Wszystkie instrumenty i wpisy są pokazywane po kilka razy:/

Ten post edytował robos85 25.11.2009, 16:20:53
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.03.2026 - 07:54