我想知道有没有办法搜索一个表给 4 个变量(列),但是在这 4 个变量中,可以激活任何或所有变量来进行搜索,问题是如果我要编写 if 语句根据输入,我将有 16 个 if 函数(我为我的 2 个变量问题写了 4 个 if 语句)
例子:
我有一个名为的表,cc_music
它有 4 列track_name
、和。artist
album
genre
问题:用户正在寻找歌曲。用户可以输入所有 4 列,或者输入任何 1 列或根本不输入。
我想知道有没有办法搜索一个表给 4 个变量(列),但是在这 4 个变量中,可以激活任何或所有变量来进行搜索,问题是如果我要编写 if 语句根据输入,我将有 16 个 if 函数(我为我的 2 个变量问题写了 4 个 if 语句)
例子:
我有一个名为的表,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 种不同的功能