Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> suma rekordów z każdego miesiąca
yaro
post
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

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


Witam

Mam dwie tabele, jedna z newsami, druga z artykułami. Wyświetlam newsy razem z artykułami posortowane wg. daty, to mi działa bez zarzutów. Chcę teraz zrobić listę miesięcy i przy miesiącach umieścić ile w danym miesiącu zostało dodanych artykułów i newsów (razem je licząc)

listopad(5)
październik(2)

Te tabele się troche różnią, ale z tym sobie poradziłem, niestety to nie chce mi wyjść.
  1. SELECT DISTINCT DATE_FORMAT(dat,'%M') AS m FROM news GROUP BY m UNION SELECT DISTINCT DATE_FORMAT(dat,'%M') AS m FROM articles GROUP BY m ORDER BY m

W zapytaniu powyżej wyświetla mi prawidłowo miesiące (bez powtórzeń), ale nie jestem wstanie uzyskać sumy

  1. SELECT DISTINCT id, count(DISTINCT id) AS ile, DATE_FORMAT(dat,'%M') AS m FROM news GROUP BY m UNION SELECT DISTINCT id, count(DISTINCT id) AS ile, DATE_FORMAT(dat,'%M') AS m FROM articles GROUP BY m ORDER BY id

Tutaj uzyskuje miesiące z liczbą wpisów, jednak miesiace powtarzają się.

Nie mam już pomysłów jakby to zrobić sad.gif


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Norbas
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Możesz spróbować:
  1. SELECT COUNT(id) AS i, DATE_FORMAT(dat ,'%m') AS m
  2. FROM news GROUP BY m
  3. UNION ALL
  4. SELECT COUNT(id) AS i, DATE_FORMAT(dat , '%m') AS m
  5. FROM articles GROUP BY m


--------------------
Go to the top of the page
+Quote Post
yaro
post
Post #3





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

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


Niestety nie działa jakbym chciał, daje rezultat taki sam jak ten drugi kod, który przedstawiłem sad.gif

Jeszcze jakieś pomysły?


--------------------
Go to the top of the page
+Quote Post
Norbas
post
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Stwórz tabelę 'miesiace' i zastosuj zapytanie:
  1. SELECT miesiac, COUNT(news.id) + COUNT(articles.id)
  2. FROM miesiace LEFT JOIN articles ON month(articles.dat) = miesiac
  3. LEFT JOIN news ON month(news.dat) = miesiac
  4. GROUP BY miesiac


--------------------
Go to the top of the page
+Quote Post
yaro
post
Post #5





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

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


Już prawie dobrze smile.gif

Poprawiłem trosze, bo nie działało, ale teraz wyświetla mi wszystkie miesiące (ale myśle że to jeszcze nie problem) tylko że do listopada zlicza 12 wpisów a jest łącznie 5.

  1. SELECT miesiac, COUNT(news.id) + COUNT(articles.id)
  2. FROM miesiace LEFT JOIN articles ON month(articles.dat) = miesiace.id
  3. LEFT JOIN news ON month(news.dat) = miesiace.id
  4. GROUP BY miesiac


Proszę jeszcze o pomoc


--------------------
Go to the top of the page
+Quote Post
Norbas
post
Post #6





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Jeśli utworzyłeś tabelę 'miesiace' o jednym polu id, którego wartością jest numer miesiąca, to grupowanie wg miesiace.id:
  1. ... GROUP BY miesiace.id


--------------------
Go to the top of the page
+Quote Post
yaro
post
Post #7





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

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


To i tak nic nie daje sad.gif

Jak zmieniłem LEFT JOIN na RIGHT to wyświetla tylko miesiące w których są wpisy

Zrzuty tabel zamieściłem na http://phpfi.com/188185

Ten post edytował yaro 26.12.2006, 20:18:30


--------------------
Go to the top of the page
+Quote Post
Norbas
post
Post #8





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


  1. SELECT miesiac, COUNT(DISTINCT news.id) + COUNT(DISTINCT articles.id)
  2. FROM miesiace LEFT JOIN articles ON month(articles.dat) = miesiace.id
  3. LEFT JOIN news ON month(news.dat) = miesiace.id
  4. GROUP BY miesiace.id


--------------------
Go to the top of the page
+Quote Post
yaro
post
Post #9





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

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


Dzięki Norbas

Działa jak należy smile.gif

Jednak proponuje jeszcze zmiane na RIGHT JOIN

  1. SELECT miesiac, COUNT(DISTINCT news.id) + COUNT(DISTINCT articles.id)
  2. FROM miesiace RIGHT JOIN articles ON month(articles.dat) = miesiace.id
  3. RIGHT JOIN news ON month(news.dat) = miesiace.id
  4. GROUP BY miesiace.id


Wielkie dzięki raz jeszcze


--------------------
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: 22.08.2025 - 00:58