Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zliczanie, w jedenj tabeli
mabor
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


Witam. Prośba o pomoc.
Mam jedną tabelę, w której mam zapisane np grupy produktów i przypisane do nich produkty poprzez kolumnnę subid, która przybiera wartość id grupy. Grupy mają wartość subid=0.

Czy możliwe jest w jednym zapytaniu wyciągnięcie tylko grup i od razu policzenie ile zawierają produktów ?

Z góry dziękuję.

Ten post edytował mabor 17.12.2004, 09:47:22
Go to the top of the page
+Quote Post
Ar2r
post
Post #2





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Nie bardzo rozumiem. Najpierw piszesz, że produkty są powiązane z grupami poprzez subid, a potem podajesz że dla wszystkich grup to pole ma wartość 0 (czyli grupy nie mają żadnych produktów). Najlepiej wklej strukturę tabeli i podaj przykładowe rekordy.
Go to the top of the page
+Quote Post
jedrzej
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.12.2004
Skąd: Milton Keynes

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


SELECT count( subid ) , subid
FROM tabelka
GROUP BY subid;

z tego co zrozumialem to chodzilo ci o to

Ten post edytował jedrzej 19.12.2004, 02:47:10
Go to the top of the page
+Quote Post
mabor
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


Nie nie.
Przykładowa struktura
id - wiadomo,
subid - dla grup wartość 0 , dla produktów id grupy,
name - wiadomo

chodzi mi o to:
select * from tabela where subid='0' - to da nam grupy
i do tego od razu policzyć produkty
Dzięki
Go to the top of the page
+Quote Post
sobstel
post
Post #5





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


jak dla mnie konstrukcja bazy jest 'kulawa'. tak czy owak dla tego co podales to rozwiazanie jedrzeja wydaje mi sie najlepsze, no moze leciutko zmodyfikwoane na :

  1. SELECT count( subid ) , subid FROM tabelka WHERE subid!=0 GROUP BY subid;


jest to rozwiazaniem postawionego przez ciebie problemu.
co prawda klopot sie pojawia jesli chcialbys wyciagac przy okazji nazwy grup, ale wtedy proponuje rozbic to na 2 tabele :

GRUPY: id_grupy, nazwa
PRODUKTY: id_produktu, id_grupy, nazwa

i wtedy

  1. SELECT grupy.nazwa, count(produkty.id_produktu) FROM grupy INNER JOIN produkty GROUP BY grupy.id_grupy;
Go to the top of the page
+Quote Post
jedrzej
post
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.12.2004
Skąd: Milton Keynes

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


dokładnie brakowało jeszcze klauzuli WHERE w tym co napisalem, ale tez jestem zdania ze lepiej jest to rozbić na dwie tabelki- normalizacja się kłania (IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif)

A tak w ogóle to Wesołych Swiąt (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mabor
post
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


Witam dzięki wszystkim za pomoc.
W trakcie testów lokalnie zrobiłem to na jednej tabeli i uzyskałem wynik taki jaki chciałem, łącznie z nazwą grupy, nie wiem tylko czy poprawne jest dołączenie tej samej tabeli. Ale skoro działa i to zwraca odpowiedni wyniki na pewno możliwe ale czy poprawne.
Przykład.

  1. SELECT pr.id, pr.nazwa, count(pr1.id) AS ile FROM products AS pr LEFT JOIN products AS pr1 ON pr.id=pr1.subid WHERE pr.subid='0' GROUP BY pr.id ORDER BY 3 DESC


Pozdrawiam i Wesołych Świąt i Szczęś. Nowego Roku
Go to the top of the page
+Quote Post
oldek
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 7.06.2004

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


Dopinanie tabeli samej do siebie jest jak widać możliwe, ale... jest to proszenie się o kłopoty. I nie tylko chodzi o ułatwienie sobie życia, choćby przy budowaniu zapytań SQL, lecz również o wzgledy stabilności. Co będzie jeśli przy wprowadzaniu danych zdarzy się taka historia że wiersz xxx wskaże na yyy, a yyy na xxx? Pętla bez końca? Załamanie bazy przez wprowadzenie niewłaściwych danych momentalnie powinno dyskwalifikować projekt.

Mając powyższe na uwadze, zmieniłbym układ pod kątem spełnienia dla bazy kryterium normalizacji, w tym konkretnym przypadku wydzielając grupy towarów do osobnej tabeli. Mam przeczucie graniczące z pewnością, że ten wysiłek opłaci się z nawiązką.
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: 20.09.2025 - 09:05