作者diamondking (天剑流星)
看板Database
标题Re: [SQL ] 对同一个TABLE重覆Query, 浪费时间@@
时间Mon Sep 10 20:58:40 2007
※ 引述《wildpeanut (B级的人生)》之铭言:
: 各位好
: 我有一个table连结的问题(不同於上次那个...)如下
: LOGIN_HISTORY
: ID TIME IP NAME PHONE ADDRESS
: -- ---- -- ---- ----- -------
: 01 07/02/11 1.1.1.1 AA 001 AB-T
: 01 07/03/22 2.1.2.1 AA 001 AB-T
: 02 07/04/01 3.2.3.1 CC 312 MG-R
: 02 07/05/04 5.4.3.1 CC 312 MG-R
: 03 07/06/05 1.3.1.8 DD 918 CP-N
: 03 07/07/09 7.1.0.1 DD 918 CP-N
: 04 07/08/08 7.9.2.3 BB 019 CG-M
: 当USER输入一些ID後,我要列出这些ID姓名(NAME)、电话(PHONE)、
: 最後一次登入的时间(TIME)与位址(IP)
: 我的想法是~ 用FOR回圈跑
: SELECT ID, NAME, PHONE, TIME, IP
: FROM LOGIN_HISTORY
: WHERE ID = 'XXX'
: AND TIME=(SELECT MAX(TIME)
: FROM LOGIN_HISTORY
: WHERE ID = 'XXX')
: 但是当输入很多ID却要QUERY很多次,非常没有效率
: 请问我SQL语法要怎麽下...会比较好?
: 最好能够一次QUERY回来~~
: 感谢你看完
一般不会让user自己输入"多个"查询key值,
因为无法预测user会输入多少个。(真的必要的话,最好限制一下,例如最多10个)
1、假设user不会输入太多组id:
select a.id, a.name, a.phone, a.time, a.ip, b.maxtime
from login_history a,
(select id, max(time) maxtime from login_history group by id) b
where a.id=b.id
and a.id in (使用者输入的所有id的逗点分隔)
2、如果使用者可能输入极大量的id,
则建议让使用者选取区间,例如1-1000号id列出来,这样sql就容易了。
3、需要输入极大量的id,且日後可能重覆查询。
则把这些id存入另一张table,这样就可以直接join了,速度保证快。
ps.你没说你用什麽database,如果是oracle的话,上面的sql有比较简单的写法:
select id, name, phone, time, ip,
max(time) over(partiotion by id)
from login_history where id in (使用者所输入的所有id的逗点分隔)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.167.208.166