Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zliczanie rekordów z kilku tabel, jeden problem
Karas!
post 4.10.2008, 13:54:25
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 10.04.2007

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


Witam mam taki problem ze zliczaniem rekordów otóż, napisałem takie zapytanie:

  1. SELECT COUNT(DISTINCT(texts.id)) AS amt_texts, COUNT(DISTINCT(links.id)) AS amt_links, COUNT(DISTINCT(categories.id)) AS amt_categories FROM texts, links, categories;


Zapytanie zlicza mi ile jest w bazie utworzonych linków, kategorii oraz tekstów ale problem się pojawia kiedy w bazie danych mam powiedzmy 3 kategorie 1 link i 0 tekstów, wtedy zwraca mi zera w amt_links, amt_texts, amt_categories. Wystarczy, że jedna z tabel nie posiada rekordów, to we wszystkich innych również jest zwracane 0 rekordów.

Jak przekształcić to zapytanie, żeby działało nawet jak w jednej z tabel nie ma rekorów?
Go to the top of the page
+Quote Post
phpion
post 4.10.2008, 14:07:01
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Wykonaj te zliczenia poprzez UNION. Wtedy problem powinien zniknąć. Kolejne zliczenia otrzymasz w osobnych wierszach, a nie (jak teraz) kolumnach.
Go to the top of the page
+Quote Post
Karas!
post 4.10.2008, 22:57:15
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 10.04.2007

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


OK wszystko działa wielkie dzięki, nawet nie wiedziałem, że w SQL istnieje coś takiego jak UNION tongue.gif
Go to the top of the page
+Quote Post
szopen
post 5.10.2008, 19:12:24
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

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


Pierwsze pytanie, czy DISTINCT jest tu potrzebny? Po nazwach sądzę, że są to primary keys, one już są z definicji distinct.

Jeśli ma być w wierszach można też tak
  1. SELECT table_rows FROM TABLES WHERE table_schema='nazwaBazy' AND table_name IN ('tabela1', 'tabela2', 'tabela3');


a jeśli w kolumnach, za pomocą subqueries
  1. SELECT (SELECT table_rows FROM TABLES WHERE table_schema='nazwaBazy' AND table_name='tabela1') AS amt_texts, (SELECT table_rows FROM TABLES WHERE table_schema='nazwaBazy' AND table_name='tabela2') AS amt_inny; -- i tak dalej


co nie znaczy, że UNION jest zły winksmiley.jpg
Go to the top of the page
+Quote Post
zebupl
post 8.10.2008, 13:15:36
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 2
Dołączył: 7.10.2008

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


Witam,

Zacznijmy od tego, że select jaki dał Karas! wskazuje, że jego baza danych nie jest bazą danych a wyłącznie zbiorem liści, dlatego ma null-e. Jakby baza była spójna miała klucze obce to wystarczy left join i problemu nie będzie.
Zatem proponuje poprawić schemat bazy by zdobywać lepsze nawyki winksmiley.jpg

pozdrawiam
munky
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 Wersja Lo-Fi Aktualny czas: 27.06.2025 - 14:24