Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytaniem (zagnieżdżone?)
mosquitoatnight
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.04.2011

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


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.
Go to the top of the page
+Quote Post
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


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.

Ten post edytował pmir13 25.04.2011, 16:32:33
Go to the top of the page
+Quote Post
mosquitoatnight
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.04.2011

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


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
Go to the top of the page
+Quote Post
pmir13
post
Post #4





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


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ć.

Ten post edytował pmir13 25.04.2011, 16:37:18
Go to the top of the page
+Quote Post
mosquitoatnight
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.04.2011

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


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?

Ten post edytował mosquitoatnight 26.04.2011, 06:27:25
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: 24.08.2025 - 04:28