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

那么有没有什么办法可以让我不必加载整个表格以及设置合适的随机偏移量,以便我可以获得随机值?

回答

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()有几种方法。

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一个,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