summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/album.lib.php58
-rw-r--r--lib/class/catalog.class.php2
2 files changed, 33 insertions, 27 deletions
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
-
?>
diff --git a/lib/class/catalog.class.php b/lib/class/catalog.class.php
index c337dec4..1e58642e 100644
--- a/lib/class/catalog.class.php
+++ b/lib/class/catalog.class.php
@@ -1575,7 +1575,7 @@ class Catalog {
flush();
show_box_top();
- echo _('Update Finished.') . _('Checked') . " $count. $total_updated " . _('songs updated.') . "<br /><br />";
+ echo _('Update Finished.') . ' ' . _('Checked') . " $count. $total_updated " . _('songs updated.') . "<br /><br />";
show_box_bottom();
return true;