0

質問があります

SELECT SQL_CALC_FOUND_ROWS a.memberid, a.category_id, a.content, a.count_cid, a.importance
FROM tb_profilingdata a, tb_member b
WHERE a.memberid = b.memberid AND a.category_id IN ($catstr)  AND a.memberid NOT IN ( $seen_txt) AND b.gender != '$gender'
ORDER BY a.memberid, a.category_id LIMIT $offset, 4500

テーブルが非常に大きいため、クエリ結果を特定の制限に制限したいと考えています。また、クエリを実行するたびにランダムな値のセットを取得できるように、動的オフセットも選択します。

これまで、PHP を使用して、テーブル内の行の総数に基づいてランダム オフセットを計算していました。ただし、オフセット値がクエリによって返される行の総数よりも大きい場合、結果は空になります。

テーブル全体をロードする必要がなく、ランダムな値を取得できるように適切なランダムオフセットを設定する方法はありますか?

4

2 に答える 2

0

Turnery 演算子を使用して、URL からオフセットを取得します 次のように (isset($_REQUEST['offset']))?$offset=$_REQUEST['offset']:$offset=0;

ランダム オフセットには、rand 関数を使用 $offset=rand(0,totalrecord/4500);

クエリでこのオフセットを渡します

SELECT SQL_CALC_FOUND_ROWS a.memberid, a.category_id, a.content, a.count_cid, a.importance FROM tb_profilingdata a, tb_member b WHERE a.memberid = b.memberid AND a.category_id IN ($catstr) AND a.memberid NOT IN ( $seen_txt) AND b.gender != '$gender' ORDER BY a.memberid, a.category_id LIMIT $offset, 4500

于 2013-02-02T06:20:16.160 に答える
0

次のネストされたクエリを試してください。

SELECT c.* FROM (
    SELECT a.memberid, a.category_id, a.content, a.count_cid, a.importance
    FROM tb_profilingdata a, tb_member b
    WHERE a.memberid = b.memberid AND a.category_id IN ($catstr) AND a.memberid NOT IN ($seen_txt) AND b.gender != '$gender'
    ORDER BY RAND() LIMIT 4500
) c ORDER BY c.memberid, c.category_id

注: SQL_CALC_FOUND_ROWS を使用してテーブル内の行の総数を取得することはできません。

ORDER BY RAND()を最適化する方法はいくつかあります。

于 2013-02-02T06:02:03.610 に答える