![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewien problem z banalnym zapytaniem. Calosc wyglada tak: SELECT * FROM psy ORDER BY rand() LIMIT 1; Niestety dla wyswietlenia tego jednego rekordu pobiera mi wszystkie wiersze z bazy danych. Czy da sie cos zrobic alby ograniczyc ilosc pobieranych wierszy? Nie bez znaczenia jest tych 1000 niepotrzebnych wierszy.... |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Jeśli chcesz wyciągnąć losowy wiersz, to niestety musisz przelecieć całą tabelę. Można to rozwiązać w nieco inny sposób. Jeśli używasz php, możesz dokonać losowania w skrypcie (musisz jednak wiedzieć jakie id występują w tabeli), a następnie wyciągnąć jeden wiersz (dla wylosowanego wcześniej id). W samym MySQL nie da się tego zrobić (przynajmniej tak mi się wydaje).
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
Witam, Mam pewien problem z banalnym zapytaniem. Calosc wyglada tak: SELECT * FROM psy ORDER BY rand() LIMIT 1; Niestety dla wyswietlenia tego jednego rekordu pobiera mi wszystkie wiersze z bazy danych. Czy da sie cos zrobic alby ograniczyc ilosc pobieranych wierszy? Nie bez znaczenia jest tych 1000 niepotrzebnych wierszy.... nie rozumiem, dajesz limit 1 i pobiera ci 1000 innych wierszy? ja to twoje zapytanie wpisalem u siebie i wyrzucilo mi jeden wiersz. |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
@AxZx Chodzi o to, że funkcja rand() musi przemielić całą tabelę, by wyciągnąć losowy wiersz
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zgadza się, chodzi o to że mieli całą tabelę a ostatnio home.pl wziął się za sprawdzanie wykorzystania bazy i zwrócili mi uwagę, że z 1000 pobieranych rekordow tylko jeden jest potrzebny w związku z czym przydałoby się to poprawić. Wymyśliłem rozwiązanie wyjątkowo nieeleganckie ale na lepsze nie wpadłem. Teraz zamiast jednego zapytania mam 3 ale trudno...
Działa choć kod jest obrzydliwy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ponowne losowanie wybrałem dlatego, że dość często wybierało mi 1 rekord. Kolejne pytanie. Czy warto zmienić typ pola z TEXT na VARCHAR jesli przechowywane są tam dane nie dłuższe niż 255 znaków? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 20:21 |