1

我需要按 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;
4

3 回答 3

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 并使用该 ID,ORDER BY FIELD(fieldname, 1,2,3...)而不是ORDER BY RAND()该会话值是否存在

于 2013-01-13T12:34:29.270 回答
2

不是在 SELECT 上随机化,而是为随机值创建一个列,在 SELECT 时在 INSERT 和 ORDER BY 上填充它。

这样,您的结果将始终以预定义的“随机”顺序返回。

于 2013-01-13T12:36:48.490 回答
0

我不知道您的意思,但我可以告诉您,您可以RAND()使用整数参数进行操作。likeRAND(10,15)将创建 10 到 15 之间的随机数。至于返回“一个随机数”,我将存储$rand = "ORDER by RAND()";然后设置一个会话并检查isset()RAND 是否已经设置过一次。

于 2013-01-13T12:35:09.003 回答