Att hämta en slumpmässig rad från en MySQL är ganska enkelt. Man lägger till ORDER BY RAND() i slutet på sin query. Nackdelen är att det går extremt långsamt. Den har en tidskomplexitet på O(n*log(n)). Det är därför Doctrine har valt att inte implementera den funktionen. Men vad gör man då om man vill plocka ut en slumpmässig rad från en tabell? Man ska göra slumpmässigheten i applikationen. En naiv lösning är att hämta alla rader och göra en array_rand() på resultatet. Detta är naturligtvis inte optimalt då det tar massa minne i onödan. En lösning som jag brukar använda mig av är denna: Detta letar efter det största id som du har i din tabell. Sen slumpar den ett värde (rand) mellan 0 och det största id. Vi returnerar sedan en rad i tabellen som är närmast större eller lika med vårt slumpade värde. Jag vill dock varna att [...]
Skrivet augusti 8th, 2012 av Tobias



