Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zliczanie i sumowanie
acztery
post
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


mam kłopot z relacją. Mysql dziwnie sie zachowuje mimo tego, że oczekuje czego innego.

mam takie zapytanie:

  1. SELECT * , SUM( ifnull( documents.count, 0 ) ) AS CtrDocuments, count( ifnull( documents.Id, 0 ) ) AS CountDocuments, SUM( ifnull( count, 0 ) ) AS SumDocuments, cat.Title AS Title, cat.Id AS Id, cat.UserId AS UserId, cat.sort AS sort
  2. FROM `cat` LEFT JOIN `documents` ON `documents`.`Cat` = `cat`.`Id`
  3. LEFT JOIN `user` ON `user`.`user_id` = `cat`.`UserId`
  4. WHERE (
  5. cat.Lang = 'ddd'
  6. ) AND (
  7. documents.Lang = 'ddd'
  8. ) AND (
  9. cat.Parent = '0'
  10. )
  11. GROUP BY cat.Id
  12. ORDER BY cat.sort DESC LIMIT 0, 30


pobiera liste kategori i liczy ile w danej jest rekordów i sumuje kolumne count. Na chwile obecna działa tylko wtedy gdy jest jakis element w danej kategori ale jak nie ma zamiast pokaza 0 to go nie wyswetla mimo tego ze mam LEFT. RIGHT i INNER tak samo

Pod zapytania niewchodzą w gre. Kilka z was moze zdziwic ze 2 razy podaje jezyk dla roznych tabel ale inaczej nie działa :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mwojcik
post
Post #2





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


Jak rozumiem tabele wyglądają następująco :

Tabela ‘cat’ :
+ id
+ title
+ userid
+ sort
+ lang
+ parent
Tabela ‘documents’
+ id
+ cat
+ count
+lang
, gdzie ‘cat.id‘ jest kluczem głównym, a ‘documents.cat’ jest kluczem obcym tabeli ‘cat’.

Możesz na początek spróbować zapytania bez tych warunków IFNULL i zobaczyć co zwraca MySQL.

  1. SELECT cat.title, cat.id , SUM (documents.count) AS sum_documents, COUNT (documents.id) AS count_documents
  2. FROM cat LEFT OUTER JOIN documents ON cat.id = documents.cat
  3. WHERE cat.parent = 0 GROUP BY cat.id, cat.title, cat.sort

Zapytanie powinno ci zwrócić listę kategorii nadrzędnych (‘parent’ = 0), gdzie w kolumnach sum_documents i count_documents będą odpowiednie wartości w przypadku gdy istnieją jakieś dokumenty w odpowiedniej kategorii lub NULLe, gdy takich nie będzie.
Teraz możesz dołożyć warunek IFNULL, żeby sprawdzić czy poprawnie NULLe będą zamieniane na 0.

  1. SELECT cat.title, cat.id , SUM (IFNULL(documents.count, 0)) AS sum_documents, COUNT (IFNULL(documents.id, 0)) AS count_documents
  2. FROM cat LEFT OUTER JOIN documents ON cat.id = documents.cat
  3. WHERE cat.parent = 0 GROUP BY cat.id, cat.title, cat.sort


Jeżeli to zadziała to możesz dodać resztę warunków, które potrzebujesz.
Niestety nie mam pod ręką MySQL, więc nie mogę sprawdzić osobiście, ale na moje oko powinno działać.


PS. podawaj następnym razem schemat tabel - oszczędzi trochę czasu .
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: 8.10.2025 - 14:33