1

randで注文する必要がありますが、更新のたびに変更したくないので、ランダムに1つだけ必要です。それは理にかなっていますか?

これが私のコードです:

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 を保存して、そのセッション値が存在する場合ORDER BY FIELD(fieldname, 1,2,3...)の代わりに使用できますORDER BY RAND()

于 2013-01-13T12:34:29.270 に答える
2

SELECT でランダム化する代わりに、ランダム値の列を作成し、INSERT で入力し、SELECT 時にその列を ORDER BY します。

そうすれば、結果は常に事前定義された「ランダムな」順序で返されます。

于 2013-01-13T12:36:48.490 に答える
0

何を言っているのかわかりませんがRAND()、整数パラメーターで操作できると言えます。likeRAND(10,15)は 10 から 15 までの乱数を作成します。「One random」を返す場合は、保存してから$rand = "ORDER by RAND()";セッションをセットアップし、isset()RAND が以前に 1 回設定されているかどうかを確認します。

于 2013-01-13T12:35:09.003 に答える