在asp中使用sql語句之8:隨機數
建立隨機生成的html**是一件相當容易實現的asp特性。你可能建立過「每日一帖」、滾動廣告等等,只需要稍加點綴就會令你的**日久彌新。
對儲存在資料庫中的資料來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求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條併發記錄。如果你需要保證每次選出10條記錄,那麼你必須進一步設計查詢。
在ASP中使用SQL語句之6 儲存查詢
在asp中使用sql語句之6 儲存查詢 當你的查詢相對簡單的時候,每次從頭開始建立sql語句也不費什麼工夫,不過,複雜的查詢就不同了,每次都從頭來會產生很多開發錯誤。因此,一旦讓sql順利地執行起來,你最好把它們存起來,在需要時再呼叫它們。這樣,哪怕是乙個簡單查詢你都能隨時用上儲存的查詢語句了。假設...
sql原生語句在tp中使用
tp的模型可以支援原生sql操作,提供了query和execute兩個方法,為什麼原生sql還要區分兩個方法呢,原因有兩個 1 返回型別不同 query用於查詢,返回的是資料集,和select或者findall一樣,所以可以直接在模板裡面使用volist標籤輸出query的查詢結果 execute用...
在django中使用sql語句查詢
django中提供了乙個raw 方法來使用sql語句進行查詢 class person models.model first name models.charfield max length 50 last name models.charfield max length 50 birth date...