From 14c432a4b14a119c390404dfda001c4fd7503343 Mon Sep 17 00:00:00 2001 From: Karl 'vollmerk' Vollmer Date: Fri, 27 Jul 2007 23:16:07 +0000 Subject: fixed typo --- lib/album.lib.php | 58 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'lib/album.lib.php') diff --git a/lib/album.lib.php b/lib/album.lib.php index 6edfc932..c484eca4 100644 --- a/lib/album.lib.php +++ b/lib/album.lib.php @@ -79,36 +79,42 @@ function get_image_from_source($data) { * This returns a random number of albums from the catalogs * this is used by the index to return some 'potential' albums to play */ -function get_random_albums($count='') { - - if (!$count) { $count = 5; } - - $count = Dba::escape($count); - - // We avoid a table scan by using the id index and then using a rand to pick a row # - $sql = "SELECT `id` FROM `album`"; - $db_results = Dba::query($sql); +function get_random_albums($count=6) { + // There's a slight chance with this logic that the number of albums + // returned will be less than the number requested if the id's for the + // albums have signifigant gaps, but the speed increase is probably + // worth it + // - Vlet + + $sql = 'SELECT '; + + for ($i = 0; $i < $count; $i++) { + if ($i > 0) $sql .= ', '; + + $sql .= 'floor(rand() * count(id))'; + } + $sql .= ' FROM `album`'; + + $db_results = Dba::query($sql); + + $sql = ''; + + $row = Dba::fetch_assoc($db_results); + + for ($i = 0; $i < $count; $i++) { + if ($i > 0) $sql .= ' UNION '; - while ($r = Dba::fetch_assoc($db_results)) { - $albums[] = $r['id']; - } + $sql .= "SELECT * FROM (SELECT `id` FROM `album` LIMIT " . $row[$i] . ",1) t".$i; + } - $total = count($albums); + $db_results = Dba::query($sql); - if ($total < ($count+2)) { return array(); } + $results = array(); - for ($i=0; $i <= $count; $i++) { - $tries++; - $record = rand(0,$total); - if (isset($results[$record]) || !$albums[$record]) { $i--; continue; } - else { - $results[$record] = $albums[$record]; - } - if ($tries > 50) { return array(); } - } // end for - - return $results; + while($row = Dba::fetch_row($db_results)) { + $results[] = $row[0]; + } + return $results; } // get_random_albums - ?> -- cgit