![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 24.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, napisałem skrypt na system loterii (system losuje z dodanych osób jedną i ta wylosowana dostaje nagrodę).
Zrobiłem dodawanie zgłoszeń. I teraz chce, że po zgłoszeniu się 100 osób system wylosuje 1 osobę. Graczy zapisanych mam w bazie. Takie mam tabele: id, name, acc_id. Jakiej funkcji użyć aby wylosować jedną osobę z tych 100 zapisanych w bazie? A i jeszcze jedno. Jak zrobić żeby już po wylosowaniu tej jednej osoby system wyczyścił całkowicie tą bazę w której znajdują się ci zapisani. Dodam że w kolumnie id mam auto_increment. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@exood takie zapytanie jest bardzo mało wydajne (dla każdego wiersza tabeli losowana jest osobna liczba losowa + sortowanie całej tabeli).
Lepiej jest zrobić to w kilku krokach; 1. maxID := SELECT MAX( id ) FROM tabela 2. randNumber := rand( 1, maxID ) 3. randID := SELECT MIN( id ) FROM tabela WHERE id >= randNumber 4. SELECT * FROM tabela WHERE id = randID Jak się uprzeć, to można to zrobić w jednym zapytaniu z podzapytaniami |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 16 Dołączył: 2.12.2009 Skąd: Płock/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@exood takie zapytanie jest bardzo mało wydajne (dla każdego wiersza tabeli losowana jest osobna liczba losowa + sortowanie całej tabeli). wiem, że jest mało wydajne ... ale nie dla 100 rekordów, kwestię wydajności w tym wypadku można uznać za najmniejszy problem. Twoje rozwiązanie jest niemalże identyczne jak gordena - również nie przewiduje braku konkretnego id w bazie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 03:49 |