I just tested the "random" meta album with a quite large gallery (~ 84k files) and those three queries are definitely added for performance reasons. However, we still can shuffle the output.
Here's my proposal for the "random" meta album. Please replace the whole code block in include/functions.inc.php (see my last post) with the following one and report if it works as expected:
case 'random': // Random files
if ($cat && $CURRENT_CAT_NAME) {
$album_name = cpg_fetch_icon('random', 2) . $lang_meta_album_names['random'] . ' - ' . $CURRENT_CAT_NAME;
} else {
$album_name = cpg_fetch_icon('random', 2) . $lang_meta_album_names['random'];
}
$query = "SELECT COUNT(*)
FROM {$CONFIG['TABLE_PICTURES']} AS r
INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS a ON a.aid = r.aid
$RESTRICTEDWHERE
AND approved = 'YES'";
$result = cpg_db_query($query);
list($count) = mysql_fetch_row($result);
mysql_free_result($result);
$query = "SELECT pid
FROM {$CONFIG['TABLE_PICTURES']} AS r
INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS a ON a.aid = r.aid
$RESTRICTEDWHERE
AND approved = 'YES'
ORDER BY RAND()
$limit";
$result = cpg_db_query($query);
$pidlist = array();
while ($row = mysql_fetch_assoc($result)) {
$pidlist[] = $row['pid'];
}
mysql_free_result($result);
$select_columns = implode(', ', $select_column_list);
$query = "SELECT $select_columns
FROM {$CONFIG['TABLE_PICTURES']} AS r
INNER JOIN {$CONFIG['TABLE_ALBUMS']} AS a ON a.aid = r.aid
WHERE pid IN (" . implode(', ', $pidlist) . ")";
$result = cpg_db_query($query);
$rowset = cpg_db_fetch_rowset($result);
mysql_free_result($result);
shuffle($rowset);
if ($set_caption) {
build_caption($rowset);
}
$rowset = CPGPluginAPI::filter('thumb_caption_random', $rowset);
return $rowset;
break;