線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6152
推到 Plurk!
推到 Facebook!

SQL語法如何動態多個like

答題得分者是:syntax
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-24 21:26:23 IP:163.29.xxx.xxx 訂閱
通常我們會用like來找資料庫中的某個欄某一此關鍵字那麼我要如何下我的SQL語法

今天如果我要同時搜尋1-7個欄位(由使用者決定),我的資料庫或程式要如何規劃呢
一、如果由多個欄位,各別搜尋
二、由同一個欄位搜尋多個關鍵字

謝謝
編輯記錄
taishyang 重新編輯於 2007-05-25 15:26:09, 註解 無‧
wst 重新編輯於 2007-05-26 07:23:31, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-25 00:38:17 IP:61.64.xxx.xxx 訂閱
用程式的方式把 妳需要的 SQL 語法拼出來
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-25 07:51:04 IP:218.170.xxx.xxx 未訂閱
把資料庫的書拿起來。
翻到”正規化”這章節。K個十次。再來看你的問題。
應該可以解決
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-25 08:34:24 IP:163.29.xxx.xxx 訂閱
謝謝二位,用程式的方法拼出來我應該作的到,我試看看。
而看正規化這章其原因是因為因為理論上設一個欄位再多關鍵字查詢,這是正統的作法謝,我就照二位先進的作法去作,
原本因為還在猶豫我要採用的方法是否是最適當,經二位指點,我會依循您們的鍵議的。
用正規化的方式作出資料庫,再用程式拼出SQL語法。
因為得分只能給一個我就先給第一個回覆的先進
謝謝
編輯記錄
wst 重新編輯於 2007-05-29 15:44:14, 註解 無‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-25 17:48:21 IP:220.142.xxx.xxx 訂閱
之前做過類似的我的做法是雙胞胎TABLE
資料庫是MSSQL
如TABLE1如下
EMP_ID 員工代碼
EMP_NAME 姓名
EMP_興趣
EMP_專長
EMP_經歷
-----------------------------------
員工代碼 姓名 興趣 專長 經歷
950543 黃 畫圖,書法 修水電 水電工,文藝組長
950235 李 讀書,書法 會計 會計組長,校友會代表
-----------------------------------
TABLE2如下
EMP_ID
EMP_INFO 資訊總合
-----------------------------------
員工代碼 資訊總合
950543 950543黃畫圖,書法修水電水電工,文藝組長
950235 950235李讀書,書法會計會計組長,校友會代表
-----------------------------------

寫一個TIGGER再生成TABLE1的同時就將所有的欄位統合變成EMP_INFO

當要找文藝比賽分組的時候會先找"組長"級的就會變成先在TABLE2上面搜尋"組長"次搜尋"書法"或者"畫圖"或者"書"
無論怎麼查詢都可以用'%關鍵字%' 對EMP_INFO做查詢



------
======================
昏睡~
不昏睡~
不由昏睡~
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-25 22:30:03 IP:203.187.xxx.xxx 訂閱
感謝您的回答,那我也講我的作法好了,我是在表格中設一個超大的欄位,再將所有的欄位的資料放進法直接對那個欄位搜尋,這樣解決了對多個欄位搜尋某個關鍵字。
但今天網路上很多用php、asp、jsp寫的程式都允許同時下多個關鍵鍵而不是單一鍵值,例如要住台中、要男性、要25歲以上,這三個不可能在同一個欄位上面,應為要合乎正規化,因此寫了一個超大的欄位來搜尋,但是長久以來我寫程式都已經設成某幾個欄位要搜尋,這種程式不難但今天難在假設有10個欄位,我不知道用戶用那幾個欄位,因此樓上的網友介紹說用程式語言一段一段加成sql語法,感覺似乎可能,我要找個時間做看看。如果有現在的範例可以參考就不用浪費太多的時間。
謝謝您的回答及範例,又讓我多一個可行的作法。謝謝
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-26 07:03:24 IP:61.219.xxx.xxx 訂閱
超大的欄位
==>?
------
Kevin
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-26 07:18:38 IP:203.187.xxx.xxx 訂閱
或許不太常但是在搜尋不特定欄位時,無法用程式解決(我想不出好的方法),我就會將某些查詢的欄位資料全部存進去一個欄位裏,最早以前我是用view,不過好像需要在資料庫中設定,無法用程式寫法?
編輯記錄
wst 重新編輯於 2007-05-26 07:22:43, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-05-26 16:19:37 IP:218.170.xxx.xxx 未訂閱
基本上,我不建議你用超大欄位這種做法。
我也不喜歡程式設計師用 like "«c%"
這種做法。我知道 like 很好用。不過,我可以同意使用的是 like "abc%"
這種做法。因為第一種做法會讓系統陷入全文檢索的慢速度。
而第二種則會有比較快的效率。

我遇到像你這種問題時,我還是用程式去完成 sql 語法。
我不會利用 borland 那種 sql 的方式。先去訂那些個什麼參數等等。
我還是會自己做 "select xxx from yyy where ........"
這樣的方式,才去叫 SQL Exec.... 而不是去訂它的 parameter..

我比較追求的程式設計方法是”大家通用”
也就是我這樣的寫法,就算到了不是 windows, 的環境,
要修改的部份不會太大的狀況。所以我用這種寫法。
我想。你如果有接觸到 php, asp, jsp 應該會有這種體會。
borland 把 SQL 包得太。。。。自我了。
所以有你所說的問題。退一步,回到純 SQL 語法來操作它的元件。
你會發現你的問題可以解決了。
===================引 用 wst 文 章===================
或許不太常但是在搜尋不特定欄位時,無法用程式解決(我想不出好的方法),我就會將某些查詢的欄位資料全部存進去一個欄位裏,最早以前我是用view,不過好像需要在資料庫中設定,無法用程式寫法?
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-05-26 19:17:10 IP:59.125.xxx.xxx 訂閱
版主您好,請問能不能給個範例,同時搜尋1-7個關鍵字(由使用者決定)
正如您所說的我正在學Delphi for php,因為我看了許多的web網站都可以讓使用者勾選數個不等的條件再搜尋,想了一天,想不出來,因為以前我寫Delphi時沒有寫過不定的欄位數、或不定數量的關鍵值的sql語法。目前我手上的書都沒有這樣的範例。真傷腦筋。

編輯記錄
wst 重新編輯於 2007-05-26 20:03:54, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-05-26 19:29:18 IP:211.22.xxx.xxx 未訂閱
插個花~
這種例子應該沒有想像中的困難吧!個人覺得以wst兄的工作經驗稍微想一下應該可以輕鬆解決。
先說說我的方法,我會用最笨但是最有效的方法來作。
1.WHERE子句的欄位是必要的篩檢關鍵。
2.其餘的篩檢條件依據使用者的選定以AND的語法連結而已。
例:
ADOQuery.SQL.Clear;
ADOQuery.Parameters.Clear;
ADOQuery.SQL.ADD('SELECT Field_1,Field_2,Field_3,Field_4,Field_5,Field_6,Field_7 FORM aTABLE WHERE Field_1 = : Value_1');
if ( Self.ValueCheckBox2.Check ) then
ADOQuery.SQL.ADD('AND Field_2 = :Value_2');
if ( Self.ValueCheckBox3.Check ) then
ADOQuery.SQL.ADD('AND Field_3 = :Value_3');
//依此類推
ADOQuery.SQL.ADD('ORDER BY Field_1');

ADOQuerySQL.Parameters.ParamValues['Value_1'] := Value_1;
if ( Self.ValueCheckBox2.Check ) then
ADOQuery.SQL.Parameters.ParamValues['Value_2'] := Value_2;
if ( Self.ValueCheckBox3.Check ) then
ADOQuery.SQL.Parameters.ParamValues['Value_3'] := Value_3;
//依此類推
ADOQuery.SQL.Open;
===================引 用 wst 文 章===================
版主您好,請問能不能給個範例,同時搜尋1-7個關鍵字(由使用者決定)
正如您所說的我正在學Delphi for php,因為我很多的web網站都可以讓使用者勾選數個不等的條件再搜尋,
想了一天,想不出來,因為以前我寫Delphi時沒有寫過不定的欄位數、或不定數量的關鍵值的sql語法。目前我手上的書都沒有這樣的範例。真傷腦筋。
編輯記錄
Stallion 重新編輯於 2007-05-26 19:35:40, 註解 無‧
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-05-26 20:02:43 IP:59.125.xxx.xxx 訂閱
您的範例,點醒了我,原來以前我也有寫過類似的程式,可能是太久沒有寫SQL了,而且最近被公司的主管操的不成人形了,又睡不飽(記憶及理解好像會退化)壓力又大(要作web 所以學習PHP),竟然想不出這個方式。真是謝謝您,

但是如果是單一欄位多個鍵值呢?我上網查了一下,查到這個網站,
http://idd.ccnet.com.tw/ebook/SOL.htm#12,裏面有個範例
範例:查3月份,CallerID為遠傳者的明細,且依CallinTime最為排序,
我想就從他來修改吧?

我沒有什麼利害的不過是「駑馬十駕,功在不捨」(這一句可能會洩漏我的年齡),修改,瞎拼,結果竟然大受歡迎,說真的我最近讀php的書,讓我覺的很汗顏,以前我都是在論譠找delphi範例,鮮少讀書的。
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-05-26 21:28:42 IP:211.22.xxx.xxx 未訂閱
hehe...
你講的生理退化現象我好像都有而且蠻嚴重的,另外我相信你不會比我更老吧?哈~
同時我更理解到,當你的興趣變成工作又變成一種壓力的時候,箇中滋味難以筆墨形容。
眼見就將退休,終於快可以作自己真正喜歡作的事情了!快樂~快樂~待價而沽~待價而沽~
===================引 用 wst 文 章===================
您的範例,點醒了我,原來以前我也有寫過類似的程式,可能是太久沒有寫SQL了,而且最近被公司的主管操的不成人形了,又睡不飽(記憶及理解好像會退化)壓力又大(要作web 所以學習PHP),竟然想不出這個方式。真是謝謝您,

但是如果是單一欄位多個鍵值呢?我上網查了一下,查到這個網站,
http://idd.ccnet.com.tw/ebook/SOL.htm#12,裏面有個範例
範例:查3月份,CallerID為遠傳者的明細,且依CallinTime最為排序,
我想就從他來修改吧?

我沒有什麼利害的不過是「駑馬十駕,功在不捨」(這一句可能會洩漏我的年齡),修改,瞎拼,結果竟然大受歡迎,說真的我最近讀php的書,讓我覺的很汗顏,以前我都是在論譠找delphi範例,鮮少讀書的。
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-05-26 22:03:24 IP:59.125.xxx.xxx 訂閱
你要退休了,不會吧(你這隻馬還蠻俊的),以公務人員來說最快也要50歲才退休,而超過45歲還在寫程式的我親眼見的人好像不超過10個。因為很多人換了位置就有該位罝應該承擔責任,因此只好將喜歡的事(寫點小程式改善一下工作效率)先搹一旁了。
系統時間:2024-04-26 16:32:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!