当前位置: 代码迷 >> ASP.NET >> 想做一个多字段的模糊查询,该怎么实现
  详细解决方案

想做一个多字段的模糊查询,该怎么实现

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

------解决方案--------------------------------------------------------
select * from 表名 where 类别 like ... and 品牌 like ......
------解决方案--------------------------------------------------------
http://hi.baidu.com/anspider/blog/item/064ef01dabdf808c86d6b6e5
------解决方案--------------------------------------------------------
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);   //去掉最后一个or        strWhere = strWhere.Insert(0, "(").Insert(strWhere.Length, ")");//前后加上()      }      else      {        strWhere += string.Format(@" {0} like '%{1}%'", ddrList.SelectedValue, txtWhere.Text.Trim());//单项指标条件查询      }      string strSql = string.Format(@"select * from 新闻表 where 1=1 and {0} ", strWhere);    //完整SQL语句           gridTable.DataSource = GetTable(strSql);     gridTable.DataBind();    }     /// <summary>  /// 获取表中的所有指标  /// </summary>  /// <returns>ATable(所有指标)</returns>    protected DataTable GetTable(string strSql)    {      DataTable ATable = new DataTable();      //config中配置的连接字      string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString.ToString();      using (SqlConnection conn = new SqlConnection(connStr))      {        SqlDataAdapter sda = new SqlDataAdapter(strSql, conn);        try        {          sda.Fill(ATable);        }        catch (Exception ex)        {          throw new Exception("SqlError:" + strSql + "\r\n" + ex.Message);        }      }      return ATable;    }}
  相关解决方案