想做一个多字段的模糊查询,该如何实现
想做一个商品的模糊查询,一个商品有多个属性值,如类别,品牌,颜色,尺寸,价格,功能说明等
现在用户只需在查询框中输入若干查询条件(没有顺序要求),系统就会到上面的这些属性中将所有条件查询一下
这个该如何实现,给点方法和建议
谢谢,分不多,全给了
[解决办法]
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语句,就能搞定
[解决办法]
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; }}
[解决办法]
界面内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="Default6" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>无标题页</title></head><body> <form id="form1" runat="server"> <div> <table> <tr><td> <asp:DropDownList ID="ddrList" runat="server"> </asp:DropDownList></td> <td> <asp:TextBox ID="txtWhere" runat="server"></asp:TextBox> </td> <td> <asp:LinkButton ID="linkOK" runat="server" onclick="linkOK_Click">搜索</asp:LinkButton></td></tr> <tr> <td colspan="3"> <asp:GridView ID="gridTable" Width="100%" runat="server"> </asp:GridView> </td> </tr> </table> </div> </form></body></html>