全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:922
推到 Plurk!
推到 Facebook!

关于SQL的问题

尚未結案
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-08 01:00:47 IP:203.88.xxx.xxx 未訂閱
请问有没有方法在一个TABLE中用SQL随机取出10个记录?
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-08 02:07:48 IP:220.134.xxx.xxx 未訂閱
是否可說一下你如此作的用意為何??? 如果僅是要顯示於介面上的話,個人提供個笨方法,先用取randon(table.recordcount)的方式來,而後再利用tablbe的moveby的方法來取得單筆資料,然後再存入一暫存table裡,當然再某些資料庫或許可利用SQL語法作達到需求,但不知你用的資料庫類型為何? ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-08 09:20:40 IP:202.62.xxx.xxx 未訂閱
您好﹗    隨機單筆取值範例 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59183    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-08 10:36:18 IP:203.88.xxx.xxx 未訂閱
引言: 是否可說一下你如此作的用意為何??? 如果僅是要顯示於介面上的話,個人提供個笨方法,先用取randon(table.recordcount)的方式來,而後再利用tablbe的moveby的方法來取得單筆資料,然後再存入一暫存table裡,當然再某些資料庫或許可利用SQL語法作達到需求,但不知你用的資料庫類型為何? ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
谢两位! 我用的是access, 我在结合数据库写一个forum, 我看到国外很多论坛在每一个贴子下都会显示一个其它主题贴子的连接, 而且这个连接的贴子是随机的, 每一次进入都不一样, 而且当我回复该贴子时, 我回复的贴子下也会跟着一个随机的贴子的连接. 所以我很好奇怎样做. 我一直都是用先选取所有, 再随机从返回结果中提出记录的方法. 但我发现随着数据越来越来, 这样做就得花很好内存去存储资料, 实际上我只需要少数几条记录, 但就要把整个资料表找下来, 太可怕了 而< href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59183">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59183的做法我也想过, 但他的做法只适用于返回某一条随机的记录,如果是多条随机记录就不行了.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-08 10:46:52 IP:202.62.xxx.xxx 未訂閱
您好﹗    隨機取出某個區域的十筆資料﹕
Var
  I, J : Integer;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * From TableName');
  ADOQuery1.Open;
  Randomize;
  I := ADOQuery1.RecordCount;
  J := Random(I) 1;  
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * From TableName Where ');
  ADOQuery1.SQL.Add('鍵值欄位 Not In (Select Top X 鍵值欄位 ');
  ADOQuery1.SQL.Add('From TableName) and 鍵值欄位 In ');
  ADOQuery1.SQL.Add('(Select Top Y 鍵值欄位 From TableName)');
  ADOQuery1.Text := StringReplace(ADOQuery1.Text, 'X',
    IntToStr(J), [rfReplaceAll, rfIgnoreCase]);
  ADOQuery1.Text := StringReplace(ADOQuery1.Text, 'Y',
    IntToStr(J 10), [rfReplaceAll, rfIgnoreCase]);
  ADOQuery1.Open;
end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-08 20:54:40 IP:203.88.xxx.xxx 未訂閱
引言: 您好﹗ 隨機取出某個區域的十筆資料﹕
Var
  I, J : Integer;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * From TableName');
  ADOQuery1.Open;
  Randomize;
  I := ADOQuery1.RecordCount;
  J := Random(I) 1;  
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * From TableName Where ');
  ADOQuery1.SQL.Add('鍵值欄位 Not In (Select Top X 鍵值欄位 ');
  ADOQuery1.SQL.Add('From TableName) and 鍵值欄位 In ');
  ADOQuery1.SQL.Add('(Select Top Y 鍵值欄位 From TableName)');
  ADOQuery1.Text := StringReplace(ADOQuery1.Text, 'X',
    IntToStr(J), [rfReplaceAll, rfIgnoreCase]);
  ADOQuery1.Text := StringReplace(ADOQuery1.Text, 'Y',
    IntToStr(J 10), [rfReplaceAll, rfIgnoreCase]);
  ADOQuery1.Open;
end;
但我要的是随机取出十个记录, 即十个记录都是随机的. 我在网上找到一个非常简单的方法(适用于access)
 
select top 10 * from table order by rnd(id)
系統時間:2024-06-29 5:07:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!