Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] pobieranie danych i count jednoczesnie
Forum PHP.pl > Forum > Przedszkole
szybki
Chciałbym pobrać wszystkie rekordy i jednocześnie zliczyć ilość komentarzy na podstawie ich ID

  1. SELECT p.*, u.user_login FROM gds_offers AS p, gds_users AS u WHERE p.user_id=u.id ORDER BY p.id DESC LIMIT :LIMIT OFFSET :offset


  1. SELECT p.*, u.user_login, COUNT(c.offer_id) AS count FROM gd_offers AS p, gds_users AS u, gds_comments AS c WHERE p.user_id=u.id AND c.offer_id=p.id ORDER BY p.id DESC LIMIT :LIMIT OFFSET :offset'


Jednak opcja z COUNT pobiera mi tylko 1 rekord w dodatku liczba komentarzy jest błędna.
in5ane
  1. SELECT
  2. p.*,
  3. u.user_login
  4. COUNT(c.offers_id) AS count
  5. FROM
  6. gd_offers p
  7. INNER JOIN gds_users u ON u.id = p.user_id
  8. LEFT JOIN gds_comments c ON c.offer_id = p.id
  9. ORDER BY
  10. p.id DESC

Do tego ten Twój LIMIT.
Turson
  1. SELECT p.*, u.user_login, COUNT(c.offer._d) AS count FROM gd_offers AS p LEFT JOIN gds_users AS u ON p.user_id = u.id LEFT JOIN gds_comments AS c ON c.offer_id = p.id ORDER BY p.id DESC LIMIT :LIMIT OFFSET :offset
szybki
Poprawiłem i teraz mam:

  1. SELECT p.*, u.user_login, COUNT(c.offer_id) AS count FROM gd_offers AS p LEFT JOIN gd_users AS u ON p.user_id = u.id LEFT JOIN gd_comments AS c ON c.offer_id = p.id ORDER BY p.id DESC LIMIT :LIMIT OFFSET :offset


Jednak to nadal pobiera mi tylko 1 rekord z błędnym zliczeniem komentarzy.
Turson
Zamiast :LIMIT i :offset wpisz ręcznie liczby i sprawdź
szybki
Cytat(Turson @ 18.06.2014, 11:38:10 ) *
Zamiast :LIMIT i :offset wpisz ręcznie liczby i sprawdź


Nawet jak je wyrzucę, to jest tylko 1 rekord.
nospor
To, ze poczatkujacy nie ogarnia podstaw mysql to rozumiem. Ale zeby dwoch zawodowcow o GROUP BY nie słyszało, to tego nie ogarniam.... tongue.gif
Turson
Brak group by spowodowałby pobranie zbyt dużej ilości rekordów, a pobiera za mało. Chyba, że czegoś tu nie rozumiem wink.gif
szybki
Cytat(nospor @ 18.06.2014, 11:44:43 ) *
To, ze poczatkujacy nie ogarnia podstaw mysql to rozumiem. Ale zeby dwoch zawodowcow o GROUP BY nie słyszało, to tego nie ogarniam.... tongue.gif


Czyli? Group by nie ma za zadanie "posortowania"? Nie bardzo rozumiem.
nospor
@Turson ke? Chcecie pobrac ilosc komentarzy do czegos tam, wiec macie uzyc GROUP BY... bez group by ale z samym COUNT dostaniecie wszystko zgrupowane w jeden rekord co ma wlasnie miejsce
@szbki to ORDER BY sortuje.... GROUP BY grupuje...
szybki
  1. SELECT p.*, u.user_login, COUNT(c.offer_id) AS count FROM gd_offers AS p, gd_users AS u, gd_comments AS c WHERE p.user_id=u.id AND c.offer_id = p.id GROUP BY p.id DESC LIMIT :LIMIT OFFSET :offset


Ok, teraz działa smile.gif dzięki.
Jeszcze jedno pytanie... Czy użycie LEFT JOIN ma jakieś kolosalne znaczenie, czy mój sposób wyżej jest alternatywny, tożsamy? jak to jest?
nospor
Dzieki left join wyswietli ci sie rekord ktory nie ma zadnych komentarzy. W twoim sposobie, wszystkie rekordy bez komentrzy nie zostaną pobrane w ogole
szybki
Faktycznie. Już poprawiłem.
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.