1

MySQL ベースの C# コードでは、データベースに検索フィルターを実装する必要があるため、select * from table where (パラメーター条件のリスト); を記述しました。問題は、特定のパラメーターに対してデフォルトの「すべて選択」が必要になる場合があることです。select * from table where type=(any\don't care); と同様です。

フィルタリングせずに表示されるすべてのタイプのすべての異なる行が必要です。where句を省略した場合と同じケースです。私のクエリの構造が壊れてしまうため、where 句を省略することはできません。. 余分なまたは欠落している「and」全体により、文字列ビルダーを使用してクエリを連結します。誰かがこれを行うより良い方法を持っている場合に備えて、私のコードを以下に投稿します。

        str.Append("Select * From ");
        str.Append(" recording ");
        str.Append(" WHERE ");



        switch (type)
        {
            case "Audio": str.Append(" and Type = " + 1 + " ");
                break;
            case "Video": str.Append(" and Type = " + 2 + " ");
                break;
            case "VoIP": str.Append(" and Type = " + 3 + " ");
                break;
            default: <**SUGGESTION HERE**> 
                break;
        }

        if (!(channelname == ""))
        {
            str.Append("and ChannelName = '" + channelname + "' ");
        }

        if(!(channel == "All"))
        {
            str.Append(" and ChannelId = '" + channel + "' ");
        }



        if (archive == "true")
        {
            str.Append(" and Archive = " + true + " ");
        }
        else if (archive == "false")
        {
            str.Append(" and Archive = " + true + " ");
        }

        str.Append(" and StartTime > '" + from + "' and ");

        str.Append("StartTime < '" + to + "' ");
        if (duration > 0)
        {
            str.Append(" and (SELECT TIMESTAMPDIFF(SECOND,EndTime,StartTime))" + durationtype + " " + duration);
        }

        str.Append(" ;");
        sqltext = str.ToString();

ここで、「type=anything」と同等のロジックを持つすべての型を表示できる switch ステートメントのステートメントを提案できれば、うまくいきます。そして、「(1、2、3など)を入力してください」と知っています。. しかし、これらのフィールドはユーザーが作成できるため、後で多くのフィールドが表示されるため、一般的な解決策が必要であり、「type in (select bla bla)」のような内部で別の選択ステートメントを使用できることもわかりません。. MySQL がパラメーターの汎用値をサポートしているかどうかを知りたかっただけです。

4

3 に答える 3

1

where に 1=1 を追加することをお勧めします

    str.Append("Select * From ");
    str.Append(" recording ");
    str.Append(" WHERE 1=1 ");



    switch (type)
    {
        case "Audio": str.Append(" and Type = " + 1 + " ");
            break;
        case "Video": str.Append(" and Type = " + 2 + " ");
            break;
        case "VoIP": str.Append(" and Type = " + 3 + " ");
            break;
    }
于 2013-08-20T05:33:09.783 に答える
1

SQL クエリを作成する際の古典的な解決策は ( WHERE 1=1) であり、すべての行で true になります。

于 2013-08-20T05:27:15.967 に答える