我想知道有沒有辦法做一個表的搜索給4變量(列),但是4,任何或所有變量可以被激活來執行搜索,問題是那如果我來寫,如果根據輸入的語句我有16個,如果功能(我寫了4如果我的2個變量的問題陳述)SQL搜索使用4個變量
例子:
我有一個表叫cc_music
,它有4列track_name
,artist
,album
和genre
。
問題:用戶正在尋找歌曲。用戶可以輸入所有4列,或者任何1列或根本沒有列。
我想知道有沒有辦法做一個表的搜索給4變量(列),但是4,任何或所有變量可以被激活來執行搜索,問題是那如果我來寫,如果根據輸入的語句我有16個,如果功能(我寫了4如果我的2個變量的問題陳述)SQL搜索使用4個變量
例子:
我有一個表叫cc_music
,它有4列track_name
,artist
,album
和genre
。
問題:用戶正在尋找歌曲。用戶可以輸入所有4列,或者任何1列或根本沒有列。
您需要構建你WHERE
條款是這樣,允許的添加劑,但「動態」搜索條件:
WHERE
(@trackName IS NULL OR track_name = @trackName)
AND (@artist IS NULL OR artist = @artist)
AND (@album IS NULL OR album = @album)
AND (@genre IS NULL OR genre = @genre)
您還需要考慮修訂這一小幅包括像部分匹配:
AND (@artist IS NULL OR artist LIKE '%' + @artist + '%')
只是要小心這樣做與大量列的性能影響。檢查你的索引!
假設您正在使用Oracle SQL
使用下面的SQL:
select * from cc_music where track_name like "%"||:track_name||"%" and artist like "%"||:artist||"%" and album like "%"||:album||"%" and genre like "%"||:genre||"%" ;
其中:是綁定變量的名稱。
不需要16個不同的功能
我使用PostgreSQL和Oracle不:) –
你可能已經提到了這一點前面..:P –
這個工作謝謝:) –