![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 1 Dołączył: 13.05.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, kombinuje na rozne sposoby i za cholere nie chce pokazać proawidlowej wartosci.
Mam 2 tabele. ZAMOWIENIA i ZAMNR [ZAMOWIENIA] id_zamow data reszte rzeczy pomijam [ZAMNR] idprod idzam //tutaj klucz obcy do id_zamow nazwa ile Chce aby w zależnosci od wybranego zakresu dat w tabeli ZAMOWIENIA wybral mi 1 produkt z tabeli ZAMNR ktory byl najczęściej kupowany i najwięcej sprzedawany gdyby nie było to zależne od wartosci 'ile' to bym sobie poradzil, ale tak to chyba w jednym zapytaniu nie da sie tego zrobic. Przykładowo, mam 3 zamowienia: zamowienia_1: koperta biala, ile=5 teczka_czerwona, ile=2 zeszyt, ile=1 zamowienie_2: zeszyt, ile=1 koperta_biala, ile=1; zamowienie_3: zeszyt, ile=2 gumka, ile=1 Jaka widać zeszyt był najczęściej kupowany, a koperta_biala była byla najwięcej sprzedawana. Ktos ma jakis pomysl jak to ugryźć? Ten post edytował termin 10.01.2007, 21:03:49 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1. Czemu trzymasz nazwe produktu i jego ID w pozycji zamowienia [ZAMNR]? Wystarczy ID + join
2. nazwy kolumn, tabel masz, hmm, nieintuicyjne, co chwile musze przewijac ekran i sprawdzac jak zapisujesz nazwy pod zam_id, zamowienie_id, id_zam, idzam czy inaczej (ja stosuje zamowienie_id) 3. SQL testowany w glowie, jakbys podal skrypt tworzacy tabele + troche danych (INSERTY) to bylo by mi latwiej. Przedmioty ktore znalazly sie w najwiekszej ilosci zamowien (ilosc zamowien z danym przedmiotem): SELECT COUNT( * ) AS ile FROM ZAMNR GROUP BY idprod ORDER BY ile DESC zeby wybrac jeden to ... LIMIT 1 zeby wybrac z przedzialu czasowego to trzeba dolaczyc Zamowienia i ograniczyc ich date SELECT COUNT( * ) AS suma FROM ZAMNR JOIN zamowienia z ON z.id = ZAMNR.idzam WHERE z.data BETWEEN '2006-01-01' AND '2006-12-31' GROUP BY idprod ORDER BY suma DESC Przedmioty, ktorych najwiecej sprzedano (w sztukach) SELECT SUM( ile ) suma -- zsumuje wartosci kolumny 'ile' FROM ZAMNR -- z zamowien JOIN zamowienia z ON z.id = ZAMNR.idzam WHERE z.data BETWEEN '2006-01-01' AND '2006-12-31' GROUP BY idprod ORDER BY suma DESC -- dla kazdego z produktow dziala? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 1 Dołączył: 13.05.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
AD 1)
nazwę produktu trzymam tylko po to bo bedzie to potrzebne do historii zamowien, ponieważ w tabeli gdzie znajduja się wszystkie towary jest tendencja że po jakimś czasie produkty zostana usunięte i zastąpione innymi, np zeszyt po pol roku, bedzie zastąpionym nowym produktem np. zeszyt 60kartek itd. chyba ze chodziło Ci o cos innego? AD 2) To fakt bede musiał nad tym popracować i wszystko ujednolicić, ja tez przewijam ekran (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) AD 3) Wszystko działa lecz małe zmiany trzeba bylo wprowadzić: SELECT nazwa, COUNT(*) AS suma FROM ZAMNR JOIN zamowienia z ON z.id_zamow = ZAMNR.idzam WHERE z.data BETWEEN '2006-01-01' AND '2006-12-31' GROUP BY idzam ORDER BY suma DESC LIMIT 1 Przedmioty, ktorych najwiecej sprzedano (w sztukach) SELECT nazwa, SUM(ile) suma FROM ZAMNR JOIN zamowienia z ON z.id_zamow = ZAMNR.idzam WHERE z.data BETWEEN '2006-01-01' AND '2006-12-31' GROUP BY nazwa ORDER BY suma DESC LIMIT 1 Bardzo Ci dziękuję, poszerzyłeś moją wiedzę na temat SQL-a (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Co do 3) --> patrz punkt 2) bo szlak mnie trafial od przewijania wiec napisalem tak zebys zrozumial kod i naniosl poprawki
Cytat nazwę produktu trzymam tylko po to bo bedzie to potrzebne do historii zamowien, ponieważ w tabeli gdzie znajduja się wszystkie towary jest tendencja że po jakimś czasie produkty zostana usunięte i zastąpione innymi, np zeszyt po pol roku, bedzie zastąpionym nowym produktem np. zeszyt 60kartek itd. chyba ze chodziło Ci o cos innego? Nie powinno sie zastepowac produktow. Produkt o ID=123 teraz jak i za 10 lat powinien byc tym samym produktem. Mozesz to rozwiazac przez dodanie kolumny 'usuniety' -- przez co starego produktu nie bedzie dalo sie kupic, i bedziesz mogl sie do niego odwolac po ID z zamowienia. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 13:57 |