作者Linethan (冷冷的心)
看板Database
标题Re: [SQL ] 某个数字往前搜寻(急)
时间Tue Feb 8 12:29:55 2011
※ 引述《paulyanzi (消失)》之铭言:
: 标题: [SQL ] 某个数字往前搜寻
: 时间: Tue Feb 8 02:21:45 2011
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 114.32.32.240
: ※ 编辑: paulyanzi 来自: 114.32.32.240 (02/08 02:35)
: 推 LPH66:你可以用 limit 30,15 (由第31笔起15笔资料) 这种方式做分页 02/08 03:23
:
: 而且也没办法知道说现在是第几笔,
: 如果可以知道,也有可能要查的时候前面资料比较旧的已经被删掉,
: 因此笔数就就乱掉了。
:
: → paulyanzi:但是我是要往前的话?例如第30笔开始的前15笔 02/08 08:47
: 推 Linethan:将资料用integer作递减排序再select top 4 是不是你要的? 02/08 09:20
:
: 不是 top 4,假设我给一个integer A跟id B,则是要搜寻符合B资料,
: 且integer栏位比A小(大),且最接近资料,
: 而因为我在insert的时候integer已经是由小到大了,
: 因此原本的作法搜寻比A大时刚好找到最接近的15笔,
: 可是搜寻比A小的时候则会找到符合小於的前15笔,而不是最接近的15笔。
因为你的资料预设是依integer由小到大排序
所以才会出现你说的错误吧
(假设A是66 你会抓出1 2 3...15 而非65 64...51 right?)
所以我才说 把资料改递减排序後 再select top 15 就ok啦
select top 15 * from table where integer<66 order by integer desc
^^^^^^^^^^^^^^^^^^^^^^^
这样就会抓出interger从65~51的15笔资料了
不过这样抓出来後就会是从大到小的排序 假如你希望查询完还是要由小至大的话
我只知道一种作法 就是把上面那一列当作一个子查询
再select它一次 然後用integer那一栏去order:
Select data.* from
(select top 15 * from table where integer<66 order by integer desc) data
order by data.Integer
我刚试了一下 这样写是可以的
还是我误会了你的意思 你要的不是这个结果吗?
:
: ※ 编辑: paulyanzi 来自: 114.32.32.240 (02/08 09:41)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.20.191.237
※ 编辑: Linethan 来自: 211.20.191.237 (02/08 12:31)
※ 编辑: Linethan 来自: 211.20.191.237 (02/08 13:43)