Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Problem z wylosowaniem wyników
szmerak
post
Post #1





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

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


Mam pewien problem z wylosowaniem wyników z bazy.

  1. $podobnesql = "SELECT id, nazwa, obraz, opis FROM filmiki WHERE idkategori='$idcat' and id <> (SELECT FLOOR( MAX(id) * RAND()) FROM filmiki) and id<>'$video' LIMIT 0,3";


Próbuje wylosować 3 wyniki obok obecnie przeglądanego filmiku ale przy tym zapytaniu wyżej filmiki nonstop się powtarzają nie wiem jak to zrobić zmienna $video jest to id obecnie przeglądanego filmiku

Z góry dziękuje za pomoc

Dobra znalazłem już odpowiedź
  1. $podobnesql = "SELECT id, nazwa, obraz, nick, views FROM filmiki WHERE idkategori='$idcat' and id<>'$video' order by rand() LIMIT 0,4";


Tylko że jest drugi problem z użyciem order by rand() przy kilku set tysiącach rekordów zapytanie może się wykonywać kilkanascie sekund tak wyczytałem. A to mnie nie ustawia ponieważ nie chcę zmulać bazy danych. Zna ktoś bardziej optymalne metody?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@CuteOne:
Gratulacje. Powielasz ORDER BY RAND(), a do tego dodajesz DISTINCT. Brakuje jeszcze jakiegoś iloczynu kartezjańskiego i będzie wypas.

@szmerak:
Zastosuj ideę ~bartek124, lepszego rozwiązania nie znajdziesz. Jeśli chcesz otrzymać np. 3 rekordy zupełnie losowe to pobierz łączną liczbę rekordów w tabeli, a następnie wylosuj 3 liczby z przedziału 0..n (albo n-1). Następnie wykonaj 3 zapytania w stylu podanym przez ~bartek124 łącząc je w jeden zbiór wyniku poprzez UNION.
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 12:30