Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Złożone zapytanie
Forum PHP.pl > Forum > Przedszkole
Fifi209
Witam, od dłuższego czasu męczę się ze złożonym zapytaniem...

Mam w mysql następujące tabele:

users:
id, name, password

news:
id, author_id, subject, content, time

comments:
id, news_id, author_id, subject, content, time

Potrzebuję wyciągnąć tak:
`news`.`subject`, `news`.`content`, `news`.`time`
`users`.`name`
I ilość komentarzy dla danego news'a.

Ja wyskrobałem coś takiego:
  1. SELECT
  2. `news`.`subject`,
  3. `news`.`content`,
  4. `news`.`time`,
  5. `users`.`name`,
  6. count(`comments`.`id`) AS `count`
  7. FROM
  8. `news`, `users`, `comments`
  9. WHERE `news`.`author_id` = `users`.`id` AND `comments`.`news_id` = `news`.`id`
  10. GROUP BY `news`.`id`
  11. ORDER BY `news`.`time` DESC LIMIT 5


Lecz jeżeli nie ma komentarzy to nie wyświetla...
Nie wiem jak to ugryźć ;/
nospor
bo comments nalezy połączyc przez LEFT JOIN a nie FROM
Fifi209
Ja wymodziłem coś takiego...

  1. SELECT
  2. `news`.`subject`,
  3. `news`.`content`,
  4. `news`.`time`,
  5. `users`.`name`,
  6. (SELECT count(`comments`.`id`) FROM `comments` WHERE `comments`.`news_id` = `news`.`id`) AS `count`
  7. FROM
  8. `news`, `users`, `comments`
  9. WHERE `news`.`author_id` = `users`.`id`
  10. GROUP BY `news`.`id`
  11. ORDER BY `news`.`time` DESC LIMIT 5


Co do joinów, szczerze mówiąc nie korzystałem więc nie potrafię.
Pytanko, czy z joinami będzie szybciej pobierał dane (przy większych ilościach) ?
Czy mógłbyś mi pokazać przykład?
nospor
wszystko masz tu opisane
http://dev.mysql.com/doc/refman/5.0/en/join.html
marcio
  1.  
  2. SELECT
  3. `news`.`subject`,
  4. `news`.`content`,
  5. `news`.`time`,
  6. `users`.`name`,
  7. count(`comments`.`id`) AS `count`
  8. FROM
  9. `news`, `users`
  10.  
  11. LEFT JOIN comments ON (news.id = comments.news_id)
  12. WHERE `news`.`author_id` = `users`.`id`
  13. GROUP BY `news`.`id`
  14. ORDER BY `news`.`time` DESC LIMIT 5
  15.  
  16.  


Fifi209
Kombinuję z tym LEFT JOIN, efekt podobny jak to co podał kolega. Mysql twierdzi, że:
Kod
MySQL zwrócił komunikat: Dokumentacja
#1054 - Nieznana kolumna 'news.id' w  on clause
nospor
nie:
`news`, `users`
a:
(`news`, `users`)

poza tym users tez mozesz dac jako left join
Fifi209
Już prawie...
  1. SELECT
  2. `news`.`subject`,
  3. `news`.`content`,
  4. `news`.`time`,
  5. `users`.`name`,
  6. count(`comments`.`id`) AS `count`
  7. FROM `news`
  8. LEFT JOIN `users` ON(`news`.`author_id` = `users`.`id`)
  9. LEFT JOIN `comments` ON(`news`.`id` = `comments`.`news_id`)
  10. GROUP BY `news`.`id`

Jednak źle pokazuje mi ilość komentarzy.

@edit
Mój głupi błąd...
Miało być
LEFT JOIN `comments` ON(`news`.`id` = `comments`.`news_id`)

Dziękuję za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.