Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] pobieranie danych i count jednoczesnie
szybki
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


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.
Go to the top of the page
+Quote Post
in5ane
post
Post #2





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


  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.
Go to the top of the page
+Quote Post
Turson
post
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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
Go to the top of the page
+Quote Post
szybki
post
Post #4





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


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.
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Zamiast :LIMIT i :offset wpisz ręcznie liczby i sprawdź
Go to the top of the page
+Quote Post
szybki
post
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To, ze poczatkujacy nie ogarnia podstaw mysql to rozumiem. Ale zeby dwoch zawodowcow o GROUP BY nie słyszało, to tego nie ogarniam.... (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Turson
post
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Brak group by spowodowałby pobranie zbyt dużej ilości rekordów, a pobiera za mało. Chyba, że czegoś tu nie rozumiem (IMG:style_emoticons/default/wink.gif)

Ten post edytował Turson 18.06.2014, 10:50:45
Go to the top of the page
+Quote Post
szybki
post
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


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.... (IMG:style_emoticons/default/tongue.gif)


Czyli? Group by nie ma za zadanie "posortowania"? Nie bardzo rozumiem.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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...
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
szybki
post
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


  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 (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dzieki left join wyswietli ci sie rekord ktory nie ma zadnych komentarzy. W twoim sposobie, wszystkie rekordy bez komentrzy nie zostaną pobrane w ogole
Go to the top of the page
+Quote Post
szybki
post
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

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


Faktycznie. Już poprawiłem.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 22:27