1

在我基于 MySQL 的 C# 代码中,我必须在我的数据库上实现和搜索过滤器,所以我写了一个 select * from table where (list of parameter conditions); 问题是有时我想要特定参数的默认“全选”。就像 select * from table where type=(any\don't care);

我想要显示所有类型的所有不同行而不过滤。如果我省略了 where 子句,也会发生同样的情况;我不能省略 where 子句,因为我的查询结构会被破坏。. 整个额外或缺少的“和”导致我使用字符串生成器连接查询。我会在下面发布我的代码,以防有人有更好的方法;

        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();

在这里,如果你可以在 switch 语句中建议一个语句,它可以显示所有类型的东西,它的逻辑相当于“type=anything”,就可以了。而且我知道“输入(1,2,3等)”。. 但是这些字段是用户可创建的,所以稍后会出现很多我想要一个通用的解决方案,而且我知道我可以在里面使用另一个 select 语句,比如 "type in (select bla bla)" 。. 我只是想知道 MySQL 是否支持参数的通用值。

4

3 回答 3

1

像这样改变

str.Append(" WHERE 1=1 ");

现在您的查询的其余部分可以保持不变。你的查询会变成这样

select * from yourTable where 1=1 and condition1 and condition2 ....
于 2013-08-20T05:26:26.810 回答
1

构建 sql 查询的经典解决方案是 ( WHERE 1=1),它对每一行都是正确的。

于 2013-08-20T05:27:15.967 回答
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 回答