2

Webページ検索フォームを更新しています。ユーザーは、検索するグループ名を選択します。そして、アクションページで、簡単にするために、次のクエリを実行します。

select GroupName
from    groupTable 
where groupName in ('Motley Crue','Alvin and the Chipmunks')

通常、これは私にとっては問題ではありませんが、この場合、データベースフィールドには次のような名前の文字列も含まれる場合があります。

Big Dog's Chair,Purple Dragon,Just Johnny,Johnny Faster,Van Halen

データベースフィールドの各アイテムをカンマ区切りリストの各アイテムでループする必要があると思います。その場合、私はこれを行う方法がわかりません。また、SOまたはgoogleで使用する検索用語もわかりません。私はいくつかの助けを使うことができました。

データベース:MSSQL 2005 Coldfusion:CF9

私は5:00CSTに仕事を辞めるので、あなたが返事をすると、私はおそらく明日までそれを見ないでしょう。

4

2 に答える 2

2

マットは正しい方向に進んでいますが、次のようになります。

グループ名がグループのサブ文字列である場合、そのソリューションは予期しない結果を生成する可能性があります。たとえば、ユーザーが「ピンク」を選んだとします。そのクエリは、「ピンクフロイド」や「ビッグピンク」、またはピンクを含む他のバンドにも一致します。

フォーム変数の名前は「selectedGroups」だと思います。それを実際のものに変更すると、機能するはずです。

select
    groupName
from
    groupTable
where
    <!--- I thought I knew a more graceful way of doing this but it isn't coming to me --->
    <cfloop list = '#form.selectedGroups#' index = "i">
        groupName = '#i#' <!--- match the group if the column only contains one value --->
    or  groupName like '#i#,%' <!--- match the group if it is the first group in the list --->
    or  groupName like '%,#i#,%' <!--- match the group name if it is in the middle of the list --->
    or  groupName like '%,#i#' <!--- match the group name if it is the last group in the list --->
    #i neq listLast(form.selectedGroups) ? ' or ' : ''# <!--- add an or for the next value to search --->
    </cfloop>
于 2012-10-31T13:16:22.617 に答える
1

これは、それらを複数の列に分割するほど理想的ではありませんが、実行できます。

select GroupName
from groupTable 
where (groupName like '%Motley Crue%'
 or groupname like '%Alvin and the Chipmunks%'
)
于 2012-10-30T21:49:07.537 に答える