看板 Database 關於我們 聯絡資訊
※ 引述《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