隨機選擇資料庫記錄的方法(使用randomize函式,通過sql語句實現)
對儲存在資料庫中的資料來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求asp「找個隨機數」然後列印出來。實際上常見的解決方案是建立如下所示的迴圈:
randomize
rnumber = int(rnd*499) +1
while not objrec.eof
if objrec("id") = rnumber then
... 這裡是執行指令碼...
end if
objrec.movenext
wend
這很容易理解。首先,你取出1到500範圍之內的乙個隨機數(假設500就是資料庫內記錄的總數)。然後,你遍歷每一記錄來測試id 的值、檢查其是否匹配rnumber。滿足條件的話就執行由then 關鍵字開始的那一塊**。假如你的rnumber 等於495,那麼要迴圈一遍資料庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型資料庫了,後者通常在乙個資料庫內就包含了成千上萬條記錄。這時候不就死定了?
採用sql,你就可以很快地找出準確的記錄並且開啟乙個只包含該記錄的recordset,如下所示:
randomize
rnumber = int(rnd*499) + 1
sql = "select * from customers where id = " &rnumber
set objrec = objconn.execute(sql)
response.writernumber &" = " &objrec("id") &" " &objrec("c_email")
不必寫出rnumber 和id,你只需要檢查匹配情況即可。只要你對以上**的工作滿意,你自可按需操作「隨機」記錄。recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
再談隨機數
現在你下定決心要榨乾random 函式的最後一滴油,那麼你可能會一次取出多條隨機記錄或者想採用一定隨機範圍內的記錄。把上面的標準random 示例擴充套件一下就可以用sql應對上面兩種情況了。
為了取出幾條隨機選擇的記錄並存放在同一recordset內,你可以儲存三個隨機數,然後查詢資料庫獲得匹配這些數字的記錄:
sql = "select * from customers where id = " &rnumber &" or id = " &rnumber2 &" or id = " &rnumber3
假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈結的列表),你可以用between 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是select 語句只顯示一種可能(這裡的id 是自動生成的號碼):
sql = "select * from customers where id between " &rnumber &" and " &rnumber &"+ 9"
注意:以上**的執行目的不是檢查資料庫內是否有9條併發記錄。
隨機讀取若干條記錄,測試過
access語法:select top 10 * from 表名order by rnd(id)
sql server:select top n * from 表名order by newid()
mysqlelect * from 表名order by rand() limit n
access左連線語法(最近開發要用左連線,access幫助什麼都沒有,網上沒有access的sql說明,只有自己測試, 現在記下以備後查)
語法elect table1.fd1,table1,fd2,table2.fd2 from table1 left join table2 on table1.fd1,table2.fd1 where ...
使用sql語句用...代替過長的字串顯示
語法:sql資料庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
access資料庫:select iif(len(field)>2,left(field,2)+'...',field) from tablename;
conn.execute說明
execute方法
該方法用於執行sql語句。根據sql語句執行後是否返回記錄集,該方法的使用格式分為以下兩種:
1.執行sql查詢語句時,將返回查詢得到的記錄集。用法為:
set 物件變數名=連線物件.execute("sql 查詢語言")
execute方法呼叫後,會自動建立記錄集物件,並將查詢結果儲存在該記錄物件中,通過set方法,將記錄集賦給指定的物件儲存,以後物件變數就代表了該記錄集物件。
2.執行sql的操作性語言時,沒有記錄集的返回。此時用法為:
連線物件.execute "sql 操作性語句" [, recordaffected][, option]
recordaffected 為可選項,此齣可放置乙個變數,sql語句執行後,所生效的記錄數會自動儲存到該變數中。通過訪問該變數,就可知道sql語句隊多少條記錄進行了操作。
option 可選項,該引數的取值通常為adcmdtext,它用於告訴ado,應該將execute方法之後的第乙個字元解釋為命令文字。通過指定該引數,可使執行更高效。
begintrans、rollbacktrans、committrans方法
這三個方法是連線物件提供的用於事務處理的方法。begintrans用於開始乙個事物;rollbacktrans用於回滾事務;committrans用於提交所有的事務處理結果,即確認事務的處理。
事務處理可以將一組操作視為乙個整體,只有全部語句都成功執行後,事務處理才算成功;若其中有乙個語句執行失敗,則整個處理就算失敗,並恢復到處裡前的狀態。
begintrans和committrans用於標記事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連線物件的error集合來實現,若error集合的成員個數不為0,則說明有錯誤發生,事務處理失敗。error集合中的每乙個error物件,代表乙個錯誤資訊。
來自:
面試必須要知道的SQL語法,語句
隨機選擇資料庫記錄的方法 使用randomize函式,通過sql語句實現 對儲存在資料庫中的資料來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求asp 找個隨機數 然後列印出來。實際上常見的解決方案是建立如下所示的迴圈 randomize rnumber int rnd 499 1 ...
面試必須要知道的SQL語法,語句
面試必須要知道的sql語法,語句 posted 2007 06 18 23 00 編輯 收藏2007年6月16日 goto是各種規範中都保留的關鍵字,卻都不提倡使用的.有時可以用do.while.來代替goto do while 0 label1 dootherthing 這個相當於 if some...
面試前必須要知道的Redis面試題
回顧前面 從零單排學redis 青銅 從零單排學redis 從零單排學redis 從零單排學redis 鉑金一 從零單排學redis 鉑金二 redis 今天來分享一下redis幾道常見的面試題 如何解決快取雪崩?如何解決快取穿透?如何保證快取與資料庫雙寫時一致的問題?一 快取雪崩 1.1什麼是快取...