MSSQL 如何实现 MySQL 的 limit 查询方式

不知为何,MSSQL 中没有 limit 这个极为重要的查询方式,熟悉 MySQL 的朋友都知道,MySQL 的 limit 对于实现分页和一些限制结果集的应用中非常方便。没有不要紧,我们可以用其他方法达到同样的目的,自己动手,丰衣足食!

语法:

 
SELECT * FROM 
(
	SELECT TOP [每页记录] * FROM 
	(
		SELECT TOP [每页记录*当前页数] [字段1, 字段2, ...] 
		FROM [数据表]	
		ORDER BY [排序字段] DESC
	)
	[表别名1] 
	ORDER BY [排序字段] 
)
[表别名2] 
ORDER BY [排序字段] DESC

示例:

 
SELECT * FROM 
(
	SELECT TOP 5 * FROM 
	(
		SELECT TOP 10 * 
		FROM table 
		ORDER BY id DESC
	) t1 
	ORDER BY id
) t2 
ORDER BY id DESC

上面的代码表示从 table 表中获取记录,每页5条记录,当前是第二页5*2=10,结果按照 id 倒序排列。

CSS 分页导航样式

分页导航在程序开发中经常用到,而通常的做法是直接显示几个链接,本文介绍的是来自 DynamicDrive 的一个分页链接效果,html代码简洁,样式完全由css控制,很容易整合到自己的网站。

CSS 分页导航样式 – 示例

CSS 部分:

 
<style type="text/css">

/*Credits: Dynamic Drive CSS Library */
/*URL: http://www.dynamicdrive.com/style/ */

.pagination{
padding: 2px;
}

.pagination ul{
margin: 0;
padding: 0;
text-align: left; /*Set to "right" to right align pagination interface*/
font-size: 16px;
}

.pagination li{
list-style-type: none;
display: inline;
padding-bottom: 1px;
}

.pagination a, .pagination a:visited{
padding: 0 5px;
border: 1px solid #9aafe5;
text-decoration: none; 
color: #2e6ab1;
}

.pagination a:hover, .pagination a:active{
border: 1px solid #2b66a5;
color: #000;
background-color: lightyellow;
}

.pagination li.currentpage{
font-weight: bold;
padding: 0 5px;
border: 1px solid navy;
background-color: #2e6ab1;
color: #FFF;
}

.pagination li.disablepage{
padding: 0 5px;
border: 1px solid #929292;
color: #929292;
}

.pagination li.nextpage{
font-weight: bold;
}

* html .pagination li.currentpage, * html .pagination li.disablepage{ /*IE 6 and below. Adjust non linked LIs slightly to account for bugs*/
margin-right: 5px;
padding-right: 0;
}

</style>

HTML 部分:

 
<div class="pagination">
<ul>
<li class="disablepage">« previous</li>
<li class="currentpage">1</li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
<li><a href="#">9</a>...</li>
<li><a href="#">15</a></li>
<li><a href="#">16</a></li>
<li class="nextpage"><a href="#">next »</a></li>
</ul>
</div>

检查 url 链接是否已经有参数,添加 ? 或 &

有时候我们需要检查 URL 链接是否已经有参数,然后根据需要判断是添加 ? 还是添加 & 在结尾,这只是一个很小的技巧,但是在做分页或者页面跳转时还是有些用处的。

比如分页,因为有些链接已经有参数了,在附加分页信息的时候不能把原有的参数丢掉,所以判断一下链接是否有参数,然后根据需要附加分页信息。

方法很简单:

 
((strpos($url, '?') !== false) ? '&' : '?');

检查链接中是否含有 ? ,如果有,如:
http://www.test.com/index.php?id=id
则直接在链接后面添加一个 & 然后跟上分页信息:
http://YITU.org/index.php?id=id&page=12

如果链接中没有参数,如:
http://www.test.com/index.php
则需要添加 & 然后跟上分页信息:
http://YITU.org/index.php?page=12

以上代码只是一个示例,具体实现方法需要您自己编写。

附上一个更为健全的检查方法:

 
<?php
$old_url = $_SERVER["REQUEST_URI"];
 
//检查链接中是否存在 ?
$check = strpos($old_url, '?');
 
//如果存在 ?
if($check !== false)
{
	//如果 ? 后面没有参数,如 http://YITU.org/index.php?
	if(substr($old_url, $check+1) == '')
	{
		//可以直接加上附加参数
		$new_url = $old_url;
	}
	else	//如果有参数,如:http://YITU.org/index.php?ID=12
	{
		$new_url = $old_url.'&';
	}
}
else	//如果不存在 ?
{
	$new_url = $old_url.'?';
}
 
echo $new_url;
?>