Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem (zagnieżdżone?)
Forum PHP.pl > Forum > Bazy danych > MySQL
mosquitoatnight
Witam, nie mogę poradzić sobie z zapytaniem:

Tabele
Aukcje (id,nazwa)
Oferty (id,id_aukcji,id_uzytkownika,wartosc)

Potrzebuje zwrócić te aukcje w których użytkownik z id=1 wygrał tzn. złożył najwyższa ofertę.
W drugim zapytaniu potrzebuję natomiast zwrócić te aukcje w których brał udział ale przegrał.

Z góry dziękuję za pomoc.
pmir13
Zakładam, że w aukcji każdy użytkownik może wielokrotnie podbijać cenę, ale każde podbicie musi być wyższe od poprzedniego, tzn wykluczamy sytuację, w której o wygraniu aukcji decydować miałaby kolejność zgłoszeń przy tej samej wartości oferty.
Wtedy wygrane aukcje użytkownika o id=1 otrzymujemy:
  1. SELECT * FROM
  2. ( SELECT id_uzytkownika, id_aukcji, max(wartosc) AS najwyzsza_oferta
  3. FROM oferty WHERE id_uzytkownika = 1 GROUP BY id_aukcji ) AS najwyzsze_oferty_uzytkownika
  4. JOIN
  5. ( SELECT id_aukcji, max( wartosc ) AS zwycieska_oferta
  6. FROM oferty GROUP BY id_aukcji) AS zwycieskie_oferty
  7. ON najwyzsze_oferty_uzytkownika.id_aukcji = zwycieskie_oferty.id_aukcji
  8. WHERE najwyzsza_oferta=zwycieska_oferta

Dla przegranych aukcji wystarczy zmienić warunek w ostatnim WHERE na przeciwny.
mosquitoatnight
Dziękuję za podpowiedź. Zapytanie wygląda niby ok ale gdy je wykonuję zwraca mi tylko kilka rekordów (powinno być kilkadziesiąt) a w dodatku nie we wszystkich dany użytkownik złożył najwyższą ofertę.

Pozdrawiam
pmir13
Czy mógłbyś podać przykład danych, dla których zapytanie zwraca błędny wynik?
Edit: faktycznie był błąd, id_uzytkownika w drugim podzapytaniu nie mógł być poprawnie zwracany jako że grupowaliśmy wg id_aukcji.
Teraz powinno być dobrze, zamiast id_uzytkownika porównujemy wartości maksymalnej jego oferty i oferty, która aukcję wygrała.
Zapytanie zwraca wszystkie aukcje, w których oferta danego użytkownika jest najwyższa, jeśli nie chcemy aukcji, które jeszcze trwają należałoby to dodatkowo ograniczyć.
mosquitoatnight
Wyglada na to, ze teraz jest git. Jak bede mial dodatkowe pytania, pozwole sobie napisac. Wielkie dzieki.

EDIT: Jeszcze jedno pytanie. Jak powinno wygladac zapytanie jezeli w wyniku chcialbym wyswietlic wszystkie aukcje, w ktorych bral udzial dany uzytkownik i dodac kolumne czy_wygral przyjmujaca wartosc 0,1?
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-2024 Invision Power Services, Inc.