在查询中使用动态偏移量

时间:2013-02-02 04:44:11

标签: php mysql

我有一个查询

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计算表中总行数的随机偏移量。 但是,如果偏移值大于查询返回的总行数,则结果将为空。

那么有什么方法可以让我不必加载整个表格以及设置适当的随机偏移量以便我可以得到随机值?

2 个答案:

答案 0 :(得分: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,您将无法获得表中的总行数。

optimize the ORDER BY RAND()有几种方式。

答案 1 :(得分:0)

使用Turnery运算符从url获取偏移量如下所示 (isset($ _ REQUEST [ '偏移']))$偏移= $ _ REQUEST [ '偏移']:$偏移= 0;

用于随机偏移使用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.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