Hex
发表于 2011-10-21 16:14:43
9streets 发表于 2010-8-10 18:31 static/image/common/back.gif
回复 5# Hex
query 和 limit 不能混合用,请参考手册。
iserich
发表于 2011-10-24 10:50:33
本帖最后由 iserich 于 2011-10-24 10:52 编辑
菜鸟发布。。。。请各位大侠指教。
参考英文官网论坛帖子,
http://codeigniter.com/forums/viewthread/122798
修改system/database/drivers/mssql/mssql_drive.php中的 _limit函数
function _limit($sql, $limit, $offset)
{
$str=strtolower(str_replace("\n",' ',$sql));
//表名
$strtemp=substr($str,strpos(strtolower($str),'from ')+5);
$tablename=substr($strtemp,0,stripos($strtemp,' '));
///排序
$orderby=substr($str,strpos(strtolower($str),'order by ')+9);
//查询条件 (未考虑group by 及其他情况)
if(strpos(strtolower($str),'where ')){
$where=substr($str,strpos(strtolower($str),'where ')+6, strpos(strtolower($str),'order by ')-strpos(strtolower($str),'where ')-6);
if($where)$where='where '.$where;
}
$sql = "
SELECT *
FROM
( SELECT *, ROW_NUMBER() OVER (ORDER BY $orderby) as NroFila
FROM$tablename $where
) AS PAG_TABLEXXX
WHERE
NroFila BETWEEN ".($offset?$offset+1:1)." AND ".($offset+$limit)."
";
return $sql;
}
未测试效率---理论上简单实现,未仔细测试
本人绝对小菜一名,水平有限,求优化!
wt_yao
发表于 2012-1-5 17:05:07
假如用户没有查询master数据库的权限,怎么办?
sy88618816
发表于 2012-2-25 23:07:28
关注中 没有找到好的解决办法
。笨才~
发表于 2012-11-16 09:51:16
我用的AR 写的,可是还是错误
。笨才~
发表于 2012-11-16 10:01:31
DECLARE mi_cursor_ea9bcad4cdc7e8b7601d42808c0160eb CURSOR DYNAMIC READ_ONLY FOR SELECT s.hotel_id, s.name, s.en_name, s.price, s.deleted, o.name as type_name, a.name as star_name, room.name as room_name, b.name as b_name FROM hotel as s LEFT JOIN option_type as o ON o.type_id = s.type_id LEFT JOIN option_star as a ON a.star_id = s.star_id LEFT JOIN hotel_brand as b ON b.brand_id = s.brand_id LEFT JOIN hotel_room as room ON room.hotel_id = s.hotel_id OPEN mi_cursor_ea9bcad4cdc7e8b7601d42808c0160eb DECLARE @CURSOR AS INT SELECT @CURSOR = CURSOR_HANDLE FROM MASTER.DBO.SYSCURSORS WHERE CURSOR_NAME = 'mi_cursor_ea9bcad4cdc7e8b7601d42808c0160eb' EXEC SP_CURSORFETCH @CURSOR, 32, 1, 2 EXEC SP_CURSORCLOSE @CURSOR这是打印的sql
。笨才~
发表于 2012-11-16 10:02:12
把这些sql放在sqlserver工具里运行,错误提示消息 21,级别 21,状态 1,第 1 行
警告: 在 11 16 2012 10:00AM 出现错误 615。请记录该错误和时间,并与您的系统管理员联系。
Hex
发表于 2012-11-16 14:00:15
。笨才~ 发表于 2012-11-16 10:02 static/image/common/back.gif
把这些sql放在sqlserver工具里运行,错误提示消息 21,级别 21,状态 1,第 1 行
警告: 在 11 16 2012...
貌似不能直接运行。
。笨才~
发表于 2012-11-17 20:15:29
Hex 发表于 2012-11-16 14:00 static/image/common/back.gif
貌似不能直接运行。
我的sqlserver是2005 貌似你修改的代码不兼容吧