![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 161 Pomógł: 9 Dołączył: 14.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Piszę skrypt licytacji. Zatrzymałem się na aukcjach wieloprzedmiotowych, sprawiają mi one niezwykłą trudność.
Każdą ofertę zapisuje sobie w bazie oferty, przy każdej nowej ofercie chciałem wszystkie pozostałe wyłączyć z prowadzenia i przydzielić im jeszcze raz uwzględniając najnowszą ofertę. Kod id auction_id user_id timestamp price ilosc win 35 7 50 2010-06-04 18:01:21 3 10 0 36 7 54 2010-06-04 18:00:23 2.5 30 0 Tak wygląda moja tabela w aukcjach wieloprzedmiotowych. Chciałbym utworzyć zapytanie które wyciągnie mi użytkowników, którzy wspólnie kupili taką ilość jak jest na aukcji. -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Potrzebna Ci suma bieżąca.
Kod SELECT user_id, ilosc, @sumaBiez:= @sumaBiez + ilosc AS sumaBiezaca FROM oferty, (SELECT @sumaBiez:= 0) AS sb WHERE @sumaBiez < dostepnaIlosc ORDER BY price DESC będziesz musiał ostatniemu kupującemu przyciąć ilość przedmiotów. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 161 Pomógł: 9 Dołączył: 14.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Prawie działa.
Nie działa tylko ten where "WHERE @sumaBiez < 10" tylko wyświetla wszystkie oferty. -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
A tak?
Kod SELECT
o.user_id, o.ilosc, @sumaBiez:= @sumaBiez + ilosc AS sumaBiezaca FROM (SELECT user_id, ilosc FROM oferty ORDER BY price DESC) AS o,(SELECT @sumaBiez:= 0) AS sb WHERE @sumaBiez < dostepnaIlosc |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 161 Pomógł: 9 Dołączył: 14.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
O to chodziło. Z obcinaniem ilości sobie powinienem poradzić.
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Można to zrobić w tym samym zapytaniu jak dobrze pomyślisz
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
dodaj tylko w SELECT:
IF(ilosc<88, ilosc, 88-ilosc) 88 w tym przypadku to ilosc wystawionych w aukcji -------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
To raczej nie przejdzie
![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
dlaczego tak uważasz?
-------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Dlatego, że nie uwzględnia przedmiotów zakupinoych przez osoby które zaoferowały wyższą cenę.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
no to:
IF(ilosc<88, ilosc, 88 - @sumaBiez) -------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
To już prędzej, chociaż też wydaje mi się, że nie do końca
![]() Najlpiej byłoby zamiast sumy biezacej zaczynającej się od zera, wstawić do zmiennej ilosc dostępnych przedmiotow i od niej odejmowac Kod SELECT
o.user_id, LEAST(o.ilosc, @iloscDostepna) AS ilosc, @iloscDostepna:= @iloscDostepna - ilosc AS iloscDostepna FROM (SELECT user_id, ilosc FROM oferty ORDER BY price DESC) AS o,(SELECT @iloscDostepna:= 88) AS sb WHERE @iloscDostepna >0 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
może, ale tamto sprawdziłem w PMA i śmiga ładnie
-------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Być może na jakimś szczególnym zbiorze danych daje poprawne wyniki, ale w ogólności raczej nie. Warunek bierze pod uwagę tylko ogólną ilość dostępnych przedmiotów i ilość zarezerwowaną przez danego klienta. Nie bierze pod uwagę tego co kupili pozostali klienci.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 07:45 |