Nie sądziłem do wczoraj, że w SQL-u (dokładniej na pewno w mysql) jest funkcja rand(), która może nam pomóc np. w wyborze losowej reklamy na stronę. Dzięki tej funkcji wybieramy i tak jeden wiersz. Jest to o tyle przydatne, że jeśli stosujemy ActiveRecord tworzy nam się jeden obiekt. A nie 100 obiektów, z których później wybieramy ten 1 losowy element.
Przykład zastosowania:
1 |
$sql = 'SELECT *, RAND(' . mt_rand(0,86622340) . ')*10000%100 AS myRandom FROM ads ORDER BY myRandom LIMIT 0,1'; |
Użyłem dodatkowo php-owej funkcji mt_rand(), aby były bardziej unikatowe losowania.
Niestety to rozwiązanie nie nadaje się do tabel, w których mamy bardzo dużą ilość danych. Ponieważ zapytanie musi na początku wygenerować dla każdego wiersza liczbę myRandom, a dopiero następnie stosuje LIMIT.