Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Zastąpiony rand + where
Forum PHP.pl > Forum > PHP
Northulus
Witam,

chciałem zastąpić nieszczęsne order by rand() na cos bardziej optymalnego.
Poczytałem i taką linię:
  1. $query2="SELECT tytul, tresc FROM artykuly WHERE kategoria='$kat' order by rand() limit 1";


zastąpilem taką:
  1. $query2="SELECT id,tytul,tresc FROM artykuly JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM artykuly)) AS id) AS rows USING (id) WHERE category='$kat'";


Niestety, nie zwraca wyniku.
Gdy usunę "WHERE category='$kat'", wowczas zadziała.

Pomóżcie smile.gif
Damonsson
Przetestuj sobie tego RANDa na dużych ilościach danych bo to, że jest wolny, już chyba nie jest aktualne.
Northulus
Hm, tabela ma 67 643 rekordow i 1,5 GB. Gdy uruchamiam ten skrypt to baza się 'zatyka'.
Nie wiem, nie znam się, może to bardzo mała baza - tak czy inaczej, chciałem zastąpić rand'a smile.gif
RafalT
może wylosowany rekord nie spełnia warunku WHERE category='$kat

spróbuj tak
zapytaniem:
  1. SELECT count(1) FROM artykuly WHERE kategoria='$kat'

pobieramy ilość rekordów $rowNum
następnie:
  1. $offset = rand(0, $rowNum-1);
  2. $query = "SELECT * FROM artykuly WHERE kategoria='$kat' LIMIT $offset, 1";

erix
  1. (SELECT MAX(id) FROM artykuly))

A kto powiedział , że identyfikatory muszą ciągłe?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.