6

質問がありますが、おそらく簡単です(達人にとって)。

SQL ページング クラスを C# から MySQL ストアド プロシージャに置き換えています。私の C# 自家製オブジェクトでは、条件に基づいてクエリが動的に構築されます。例:

if(keywords is not null)
{ 
  whereClause += "WHERE description LIKE '%keywords%'"
}
if(price is not null)
{
  whereClause += "AND price = '%price%'"
}

....

string query = "SELECT col1, col2 FROM tblThreads " + whereClause

さて、私の質問は次のとおりです。MySQL でこれに似た動的 where 句を実行するにはどうすればよいですか? むしろ、これらのパラメータに何も入力しない場合、ストアド プロシージャで MySQL にそれらをスキップするように指示するにはどうすればよいでしょうか? いいえ:

SELECT col1, col2 FROM tblThreads

これらのパラメータがnullの場合、このようなものは機能しますか?

SELECT col1, col2 FROM tblThreads WHERE (IS NULL @keywords OR description like '%@keywords%'

??

みんなありがとう。

4

4 に答える 4

3

CASEステートメントを使用して、の値を確認できます@keywords

SELECT  col1, col2 
FROM    tblThreads 
WHERE   description LIKE  CASE WHEN @keywords IS NULL 
                            THEN description
                            ELSE CONCAT('%', @keywords, '%')
                            END
        AND
        price LIKE  CASE WHEN @price IS NULL 
                            THEN price
                            ELSE CONCAT('%', @price, '%')
                            END
于 2013-02-20T15:24:26.117 に答える
2

データベース全体のクエリを許可している場合の最も簡単な方法は1 = 1、ステートメントに a を追加することです

whereClause = "WHERE 1 = 1"

if(keywords is not null)
{ 
 whereClause += "AND description LIKE '%keywords%'"
}
if(price is not null)
{
 whereClause += "AND price = '%price%'"
}
于 2013-02-20T15:23:19.233 に答える
0
SELECT col1, col2 
FROM tblThreads 
WHERE case when @keywords is not null then description like '%' + @keywords + '%' when @price is not null then price like'%' + @price + '%' end 
于 2013-02-20T15:24:42.343 に答える