Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Złożone zapytanie z funkcją COUNT
camikazee
post
Post #1





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


Witam!

Męczę się aby poprawnie wyjąć dane z trzech tabel.
Tabele, które biorą udział w zapytaniu:
- firmy
- branże
- komentarze
- referencje

Standardowe połączenie, firma należy do branży, może posiadać (lub nie) komentarze i referencje.
Teraz pytamy:

  1. SELECT firma.*, branzab.*, COUNT(ref.firmid) AS referencje, COUNT(kom.firmid) AS komentarze
  2. FROM branze_przydzial AS branzaf, branze_nazwy AS branzab, firma AS tablica_firm
  3. LEFT JOIN rerefencje AS ref ON firma.firmid = ref.firmid
  4. LEFT JOIN komentarze AS kom ON firma.firmid = kom.firmid
  5. WHERE firma.firmid = branzaf.firmid
  6. AND branzaf.id_br = branzab_id_br


Wynik taki, że uzyskuję tablicę asocjacyjną ale w komórkach referencje i komentarze są nieprawidłowe dane.
Chciałbym pobrać tablicę z firmami, branżami oraz ilością komentarzy i referencji.

Ten post edytował camikazee 17.07.2008, 08:57:55


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
osiris
post
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


jesli dobrze rozumiem schemat bazy to bedzie tak:
  1. SELECT f.*, b.*, IF r.ile IS NULL THEN 0 ELSE r.ile AS referencje, IF k.ile IS NULL THEN 0 ELSE k.ile AS komentarze
  2. FROM firma AS f INNER JOIN branza AS b ON f.id_branzy = b.id_branzy
  3. LEFT JOIN (SELECT firmid , COUNT(*) AS ile FROM referencje GROUP BY firmid) AS r ON r.firmid = f.id
  4. LEFT JOIN (SELECT firmid , COUNT(*) AS ile FROM komentarze GROUP BY firmid) AS k ON k.firmid = f.id


Pozdrawiam
Go to the top of the page
+Quote Post
camikazee
post
Post #3





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


Próbowałem na różne sposoby, ale ciągle jest błąd wskazywany na procedurę z IFami., gdy je wykluczam, to wydobywa dane tyle że na końcu mam ORDER BY (referencje+komentarze) DESC, by sortowanie było malejąco po sumacyjnej wartości referencji i komentarzy. I tu się pojawia problem gdy wartością jest NULL. Do tego miejsca ładnie sortuje potem NULL i 1 jest poniżej samych NULL, gdzie teoretycznie suma powinna wynieść 1.


Zrobiłem funkcją CASE i działa smile.gif Nie wiem dlaczego IFem nie chce. Ogólnie odnosząc się do Twojego przykładu początek zapytania wygląda tak:

  1. SELECT f.*, b.*,
  2. CASE
  3. WHEN r.ile IS NULL THEN 0
  4. ELSE r.ile
  5. END AS referencje,
  6. CASE
  7. WHEN k.ile IS NULL THEN 0
  8. ELSE k.ile
  9. END AS komentarze
  10. FROM...


smile.gif

Ten post edytował camikazee 17.07.2008, 09:31:51


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
osiris
post
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


No tak, zapomnialem ze IF w MySQL jest funkjca. wiec poczatek zapytania wygladalby tak:
  1. SELECT f.*, b.*, IF(r.ile IS NULL, 0, r.ile) AS referencje , IF(k.ile IS NULL, 0, k.ile) AS komentarze
  2. FROM ...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 13:39