我需要通过rand订购,但我不希望它在每次刷新时都需要改变,我需要一个随机,这是否有意义?
这是我的代码:
function findSimilarByTag($gid,$limit=5) {
$gid=$this->quotesmart($gid);
$limit=$this->quotesmart($limit); //yes, this is senseless
$db =& JFactory::getDBO();
$query ="SELECT count( a.cid ) , a.gid, b.* \r\n";
$query.="FROM `#__yfl_game2cat` a \r\n";
$query.="JOIN #__yfl_game b ON a.gid = b.id
WHERE a.cid
IN (
SELECT cid
FROM #__yfl_game2cat
WHERE gid = '$gid'
)
AND a.gid != '$gid'
GROUP BY a.gid
ORDER BY rand()
LIMIT ".$limit;
$db->setQuery($query);
$games=$db->loadObjectList();
if($db->getErrorMsg()) $games=$db->getErrorMsg();
return $games;
答案 0 :(得分:2)
让所有用户看到相同的随机顺序
如果您希望每个人都使用相同的随机顺序,只需添加另一列,您可以在其中放置随机生成的数字并按该列排序。
每位用户:
如果结果集相同(即没有其他数据更改),您可以将整个结果集存储在会话中。
session_start();// top of all php files that need to use session
if (isset($_SESSION['findSimilarByTag'])) $rs=$_SESSION['findSimilarByTag'];
else $rs=$_SESSION['findSimilarByTag']=findSimilarByTag($gid);
// ... go ahead and use $rs
如果结果中的其他数据发生变化,或者结果集中存在大量数据,则可以存储唯一ID,如果该会话值存在,则使用ORDER BY FIELD(fieldname, 1,2,3...)
代替ORDER BY RAND()
答案 1 :(得分:2)
不是在SELECT上随机化,而是为随机值创建一个列,在SELECT时将它填充到INSERT和ORDER BY那一列上。
这样,您的结果将始终以预定义的“随机”顺序返回。
答案 2 :(得分:0)
我不知道你的意思,但我可以告诉你,你可以使用整数参数操纵RAND()
。像RAND(10,15)
一样会创建10到15之间的随机数。至于返回“一个随机”然后,我会存储$rand = "ORDER by RAND()";
然后设置一个会话并检查isset()
以查看RAND是否有已经设置过一次或没有。