您好我需要获取结果并仅在有限的部分中应用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
”
答案 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。