想做一个商品的模糊查询,一个商品有多个属性值,如类别,品牌,颜色,尺寸,价格,功能说明等
现在用户只需在查询框中输入若干查询条件(没有顺序要求),系统就会到上面的这些属性中将所有条件查询一下
这个该如何实现,给点方法和建议
谢谢,分不多,全给了
------解决方案--------------------------------------------------------
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语句,就能搞定
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
我不知道 你说的“查询框中输入若干查询条件” 怎么输入??
一个文本框? 可以随便输入一个? 可以随便输入多个? 多个怎么区分?
就算输入一个 每个字段都要进行模糊查询吧 那样搜索起来效率非常慢 遍历每个字段都用like 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; }}