![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Struktura bazy w uproszczonym schemacie:
tabela `list` czyli tabela główna z opisem aukcji, wystawcą, datą zakończenia itp. tebela `bids` czyli tabela z poszczególnymi licytacjami (kwota, użytkownik). Relacja jeden do wielu (jedna aukcja, 0-* licytacji).
Zapytanie kolejno bierze listę aukcji, następnie dołącza do niej na podstawie ID licytacje. Bez problemu działa podsumowanie tj. maksymalny bid, liczba licytacji. Potem oczywiście za WHERE jest troszkę więcej warunków ale nie chce zaciemniać. Problem jest jak na razie jeden - `username` NIE zawiera nicku osoby, która wygrywa. Bierze pierwszy lepszy nick z listy bidów dla danej aukcji. Nie ma możliwości zastosowania ORDER BY, które jest blokowane przez grupowanie. Gdy zaś nie ma grupowania to liczy sumę bidów i maksymalny bid globalnie, a nie dla danej aukcji. Wynik ma mniej więcej wyglądać następująco: Tytuł aukcji || Sprzedawca || Liczba ofert || Najwyższa oferta || Wygrywa (pogrubione = z tabeli bids) Działa wszystko oprócz ostatniego, ogólnie zapytanie się strasznie rozrasta (dochodzą warunki dotyczące aukcji, bidów, sortowanie). Zastanawiam się czy nie robię tego troszkę naokoło. Nie ukrywam, że wynik ma być zbliżony od listy aukcji jak z Allegro (oprócz paginacji). Ten post edytował markonix 28.06.2011, 15:45:49 -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 32 Dołączył: 9.09.2010 Skąd: Brzeg Ostrzeżenie: (0%) ![]() ![]() |
Pokaż mi struktury tych wszystkich użytych tabel, inaczej nie mogę Ci pomów
![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Raczej nic nie pomogą, są tam tylko atrybuty aukcji, które nie mają znaczenie dla problemu.
A tabela bidów składa się w uproszczonej formie z id aukcji (do łączenia), użytkownika i kwoty. Po polsku pytanie brzmi - jak stworzyć listę aukcji w relacji 1 do 1 gdzie wygląda to tak: AUKCJA + WIERSZ NAJWIĘKSZEGO BIDA DLA AUKCJI. (największa wartość w określonej kolumnie) -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Powiem tak... Mysql teoretycznie pobiera losowy wiersz spośród tych zgrupowanych. W praktyce jednak jest ciut inaczej. Ten losowy to pierwszy spośród grupy. Efekt? Posortuj rekordy według wysokości bid malejąco w podzapytaniu, zanim zaczniesz joinować i grupować. Count i max będą działać, ale dodatkowo będziesz miał tabelę bidów tak posortowaną, że zawsze pierwszy w grupie będzie bid z najwyższą ofertą. A tym samym będzie w nim na bank klucz do id usera, który go walnął.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Niestety ORDER BY w tym podzapytaniu nie zadziała - posortuje WYNIK grupowania, a nie bidy w danej grupie.
No chyba, że mam to jeszcze inaczej zrobił, 3 select w tym selectcie ![]() -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 6 Dołączył: 24.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
A może tak...
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Markonix: Pisałem wyraźnie... posortuj wcześniej
![]()
Jak się nie da, jak się da ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Zwraca wynik 1 aukcja -> wszystkie leady.
Ogólnie to w skrypcie poszedłem na skróty i dodałem te drugie zapytanie. Myślę też o tym, aby właśnie napisać takie zapytanie jak Twoje, albo po prostu zwykłego JOINa + bidy posortowanego wg wartości. Wtedy jednak zwracam gdzieś o 500% więcej wierszy niż potrzebuje oraz wymagana jest obróbka w PHP (wyświetlać tylko po jednym wierszu na id aukcji). EDIT:
http://dev.mysql.com/doc/refman/5.0/en/exa...-group-row.html Coś tam mi wyszło ale jeszcze będę testował ![]() Ten post edytował markonix 30.06.2011, 20:26:39 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:09 |