日期:2014-05-17  浏览次数:20604 次

想做一个多字段的模糊查询,该如何实现
想做一个商品的模糊查询,一个商品有多个属性值,如类别,品牌,颜色,尺寸,价格,功能说明等
现在用户只需在查询框中输入若干查询条件(没有顺序要求),系统就会到上面的这些属性中将所有条件查询一下
这个该如何实现,给点方法和建议
谢谢,分不多,全给了

------解决方案--------------------
select * from 表名 where 类别 like ... and 品牌 like ......
------解决方案--------------------
http://hi.baidu.com/anspider/blog/item/064ef01dabdf808c86d6b6e5.html
------解决方案--------------------
string sql="select * from tb where 1=1";
sql+=条件?" and 字段 like '% %'":"";
------解决方案--------------------
拼接字符串 判断条件是否添加
------解决方案--------------------
select * from [商品] where 类别=isnull(@类别,类别) and 品牌=isnull(@品牌,品牌) 如此类推

select * from [商品] where 类别=case when @类别='' then 类别 else @类别 (后面接着其他条件)


都是一样道理。
------解决方案--------------------
用or 一直or 下去试试
------解决方案--------------------
拼写Sql语句,就能搞定
------解决方案--------------------
探讨
select * from 表名 where 类别 like ... and 品牌 like ......

------解决方案--------------------
探讨
引用:
select * from 表名 where 类别 like ... and 品牌 like ......

应该不是很难把
这个就可以 应该用AND不应该用OR

------解决方案--------------------
我不知道 你说的“查询框中输入若干查询条件” 怎么输入??

一个文本框? 可以随便输入一个? 可以随便输入多个? 多个怎么区分?

就算输入一个 每个字段都要进行模糊查询吧 那样搜索起来效率非常慢 遍历每个字段都用like or再连接起来。。

再“若干个”?。。。。

建议你还是规范一下查询条件为好
------解决方案--------------------
探讨
引用:
select * from 表名 where 类别 like ... and 品牌 like ......

应该不是很难把
这个就可以 应该用AND不应该用OR

------解决方案--------------------
看看这个例子,应该够你用了。只要改改表名,及SQL连接字那
C# code

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class Default6 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
        string 表名 = "新闻表";
        //查询[新闻表]中的指标SQL语句
        string strSql = string.Format(@"select [name] from syscolumns where [id] in 
                                    (select [id] from sysobjects where [type]='U' and [name]='{0}')", 表名);
        ddrList.DataSource = GetTable(strSql);//查询所有字段
        ddrList.DataTextField = "name";
        ddrList.DataValueField = "name";
        ddrList.DataBind();
        ddrList.Items.Insert(0, "全部"); //如果选择全部,则查询所有
      }
    }
    protected void linkOK_Click(object sender, EventArgs e)
    {
      string strWhere = string.Empty;
      if (ddrList.SelectedValue.Equals("全部"))     //如果选择  全部  所有指标查询
      {
        //and 条件  
        //for (int i = 1; i < ddrList.Items.Count; i++)         //i=1是去除[全部]这个指标
        //{
        //  strWhere += string.Format(@"  {0} like '%{1}%' and", ddrList.Items[i].Value, txtWhere.Text.Trim());   //拼接查询条件语句
        //}           
        //strWhere = strWhere.Substring(0, strWhere.Length - 3);    //去掉最后一个and


        //or 条件
        for (int i = 1; i < ddrList.Items.Count; i++)         //i=1是去除[全部]这个指标
        {
          strWhere += string.Format(@"  {0} like '%{1}%' or", ddrList.Items[i].Value, txtWhere.Text.Trim());   //拼接查询条件语句      
        }
        strWhere = strWhere.Substring(0, strWhere.Length - 2);   /