Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem (serwis aukcyjny)
Forum PHP.pl > Forum > Bazy danych > MySQL
sobstel
mysql 4.0.20

robie wlasnie projekt na zaliczenie i natknalem sie na maly problem.

mam 3 tabele:

AUKCJE: id_aukcji, tytul, opis
LICYTACJE : id_aukcji, id_uzytkownicy, suma_licytacji
UZYTKOWNICY: id_uzytkownicy, login

teraz chcialbym wyciagnac te aukcje, w ktorych danych uzytkownik bral udzial (note: jesli user lictowal np. 3 razy to w LICYTACJE sa odpowiednio 3 rekordy, nie tak jak na allegro jeden)

dla wyciagniecia listy aukcji robilem to tak mniej wiecej tak...
  1. SELECT aukcje.id_aukcji, aukcje.tytul, MAX(licytacje.suma_licytacji) AS obecna_cena, COUNT(licytacje.suma_licytacji) AS ilosc_ofert FROM aukcje LEFT JOIN lictacje USING (id_aukcji) WHERE <span style="font-style: italic;">warunki w zaleznosci od tego czy wyciagam przedmioty sprzedane, sprzedawane, niesprzedane czy tez po prostu liste dla danej kategori GROUP BY aukcje.id_aukcji;


jednak korzystajac z powyzszegoz apytania do wyciagneicia dla aukcji, w ktorych danych uzytkownik bral udzial tj. waruenk WHERE licytacje.id_uzytkownika=id_usera_wysylajacego_żądanie, pojawia sie problem ze OBECNA_CENA i ILOSC_OFERT nie beda sie zgadzac!

jakies pomysly by to rozwiazac? zaznaczam ze chodzi mi o zalatwienie tego jednym zapytaniem.
Ar2r
Nie widzę w tym pytaniu złączenia z tablicą UZYTKOWNICY
sobstel
Cytat(Ar2r @ 2004-12-17 18:04:47)
Nie widzę w tym pytaniu złączenia z tablicą UZYTKOWNICY

bo jest niepotrzebne...
Ar2r
A skąd bierzesz id_usera_wysylajacego_żądanie
sobstel
Cytat(Ar2r @ 2004-12-17 18:24:49)
A skąd bierzesz id_usera_wysylajacego_żądanie

z sesji
LukaszLenart
Chyba trzeba uzyc jeszcze GROUP BY id_uzytkownicy i zlaczasz w zla strone, powinno byc Licytacje left join Aukcje, wtedy dostanie informacje o liczbie licytacji dla danej aukcji. W twoim przypadku dostajesz aukcje i ostatnia licytacje ja dotyczaca (lub inna przypadkowa)
sobstel
Cytat(LukaszLenart @ 2004-12-18 23:32:04)
Chyba trzeba uzyc jeszcze GROUP BY id_uzytkownicy i zlaczasz w zla strone, powinno byc Licytacje left join Aukcje, wtedy dostanie informacje o liczbie licytacji dla danej aukcji. W twoim przypadku dostajesz aukcje i ostatnia licytacje ja dotyczaca (lub inna przypadkowa)

1. jak zrobie GROUP BY id_uzytkownika to otrzymam uzytkownikow, a nie aukcje.

2. jak zlacze licytacje left join aukcje to nie dostane aukcji, w ktorych nikt nie bral udzialu. (poza tym ten left join w praktyce oznacza aukcje inner join licytacje)
skrypt ten ma byc odpowiedzialny za wyswietlanie listy aukcji we wszystkie mozliwe sposoby (z wyszukiwarki, po wybrnaiu kategori, dla uzytwkonika kupione,s przedane, sprzedawane, kupowane, itp.)

3. w moim przypadku nie pobieram niczego z tabeli licytacji tylko z tabeli aukcje. w wyniku czego po uzyciu GROUP otrzymuje konkretna liczbe aukcji i najwyzsza oferte. problem pojawia sie gdy chce wproadzic watunek ograniczajacy dla kogos kto licytuje ale jego oferta nie jest najwyzsza, bo przy WHERE id_uzytkownika te liczby sila rzeczy nie sa dobre.

4. tak czy owak problem postanowilem rozwiazac przez dodanie dodatkowych kolumn w tabeli aukcje : obecna_cena, ilosc_ofert.

5. dziekuje wszystkim ktorzy zechcieli tu zajrzec i podzielic sie uwagami!
popbart
Cytat
jednak korzystajac z powyzszegoz apytania do wyciagneicia dla aukcji, w ktorych danych uzytkownik bral udzial tj. waruenk WHERE licytacje.id_uzytkownika=id_usera_wysylajacego_żądanie, pojawia sie problem ze OBECNA_CENA i ILOSC_OFERT nie beda sie zgadzac!


Chyba to bedzie działać winksmiley.jpg
  1. SELECT aukcje.id_aukcji, aukcje.tytul, MAX(licytacje.suma_licytacji) AS obecna_cena, COUNT(licytacje.suma_licytacji) AS ilosc_ofert
  2. FROM aukcje LEFT JOIN lictacje USING (id_aukcji)
  3. WHERE aukcje.id_aukcji IN(SELECT id_aukcji FROM licytacje WHERE id_uzytkownika=id_usera_wysylajacego_żądanie)
  4. GROUP BY aukcje.id_aukcji
sobstel
powinno. sęk w tym ze jestem ograniczony do mysql 4.0.20. podzapytania są dostępne dopiero od 4.1

co do problemu obecnie nie widzę innego sposobu, chyba za dużo chciałem zrobić za jedym zamachem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.