我怎样才能“命令”只有LIMIT结果在mysql查询?

时间:2013-12-16 18:46:57

标签: mysql sql

您好我需要获取结果并仅在有限的部分中应用order by。你知道,当你通过订购所有行来申请订单时,我想要的只是对有限的部分进行排序,这是一个例子:

// all rows
SELECT * FROM users ORDER BY name

// partial 40 rows ordered "globally"
SELECT * FROM users ORDER BY name LIMIT 200,40

解决方案是:

// partial 40 rows ordered "locally"
SELECT * FROM (SELECT * FROM users LIMIT 200,40) AS T ORDER BY name

此解决方案运行良好但存在问题:我正在使用Listview组件,该组件需要表中的TOTAL行数(使用SQL_CALC_FOUND_ROWS)。如果我使用这个解决方案,我无法得到这个总数,我会得到有限的部分数(40)。

我希望您能根据查询给我解决方案,例如:“ORDER BY LOCALLY

1 个答案:

答案 0 :(得分:0)

既然你正在使用PHP,那么也可以简单一点,对吧? 只能在MySQL中执行此操作,但为什么会使事情复杂化? (此外,减少在MySQL服务器上的负载总是一个好主意)

$result = db_query_function("SELECT SQL_CALC_FOUND_ROWS * FROM `users` LIMIT 200,40");
$users = array();
while($row = db_fetch_function($result)) $users[] = $row;

usort($users,function($a,$b) {return strnatcasecmp($a['name'],$b['name']);});

$totalcount = db_fetch_function(db_query_function("SELECT FOUND_ROWS() AS `count`"));
$totalcount = $totalcount['count'];

请注意,我使用了伪造的函数名称来表明这是与库无关的;)在您选择的函数中使用Sub。