mam tabele produkty w tabeli kilkaset wpisow z tego kilkadziesiat promocyjnych
potrzebuje teraz z posrod tych promocyjnych wylosowac 5 losowych id
zapytanie:
SELECT idprodukt FROM produkty WHERE promocja=1 ORDER BY RAND() LIMIT 5;
zwraca mi id zblizone do siebie a bardzo czesto rozniace sie tylko o 1 czy 2 (np,: 22, 23, 28, 55, 80)
macie jakies pomysly jak uzyskac naprawde losowe id najlepiej w miare oddalone od siebie ??
mozesz pobrac id produktow w promocji i w php wylosowac kilka z nich
Przeprowadzilem maly test, dla 100, 500 i 1000 pozycji (ktore bez limitu by zwrocil) i zawsze rozbieznosci byly dosc duze, wiec... :-/
Jaka baza danych? I ile dokladnie masz pozycji, ile pozycji "where promocja=1" ?
A jak nie ma ich za duzo i masz szybkie polaczenie z baza (np strona i baza sa na tym samym serwerze), to rzeczywiscie mozesz pobrac wszystko i w phpie wylosowac
he nie sprawdzilem, produktow spelniajacych warunek jest tylko 35 :/
a uzycia PHP chcialem uniknac, poczekam jeszcze az baza sie rozrosnie, klient ma ja do dyspozycji dopiero od 2 dni i potestuje wtedy, dzieki za sugestie
Komentujący Manual MySQL napisał(a)
If "SELECT * FROM tab ORDER BY RAND()" doesn't work for you. Try to put a random value between the brackets.
Więc może coś w stylu
$sql='SELECT * FROM table ORDER BY RAND('.rand().') LIMIT 5';
zadziała?