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
bartek124
post
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 15.06.2008
Skąd: Kołaczyce

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


Wyciąg łączną liczbę filmików z bazy danych, wygeneruj dowolną liczbę z przedziału 0,$liczbafilmów i wrzuć do zapytania zamiast order by rand(),


Kod
$podobnesql = "SELECT id, nazwa, obraz, nick, views FROM filmiki WHERE idkategori='$idcat' and id<>'$video' LIMIT $losowaliczba,4";


Gdzie $losowaliczba to wygenerowana liczba.

Jaka różnica w stosunku do rand? Taka, że pierwszy filmik będzie losowy, a następne trzy, takie, jakie następują po pierwszym, zależnie od sortowania.

Troszkę więcej kombinacji, ale przy tych kilkuset tysiącach rekordów, zysk jest. Funkcja rand() musi przeszukać wszystkie rekordy z tabeli, zanim zwróci Ci te cztery pożądane. Korzystając klauzuli LIMIT, od razu mówimy, czego chcemy.
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: 7.10.2025 - 04:44