[MySQL] losowanie rekordow

0

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 ??

0

mozesz pobrac id produktow w promocji i w php wylosowac kilka z nich

0

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

0

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

0
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?

1 użytkowników online, w tym zalogowanych: 0, gości: 1