当前位置:编程学习 > C#/ASP.NET >>

如何做类似淘宝的多属性搜索?

我最近看了一个网页,跟淘宝搜索很相似,想请教下各位,这样的搜索的属性数据库是如何建的,还有建立后是如果搜索的?
http://bendi.koubei.com/fuzhou/searchstore--perPrice-0~20---areaCode-3501040000---key-%CB%AE%D6%F3%D3%E3---category-4---address-%B2%D6%C9%BD%C7%F8---subcates-123
上边有“价格属性”,“区域属性”,“地址属性”等等,是否每个属性都建立一个跟商户想关联的“属性表”以及“关联表”,表格建立后,具体查询其中某几个属性时,又是如何操作的呢。我比较糊涂,麻烦大家指点指点下,谢谢。 --------------------编程问答-------------------- 产品表 + 属性表 + 属性值表
产品表里就包括一些产品的公共属性
属性表里设置私有属性的名称  
属性值表里就是每个产品私有属性的值
商品表如ID,名称
属性表如ID,属性名称,类型
商品属性表如商品ID,属性ID,值
http://topic.csdn.net/u/20100421/15/e431bfe0-f455-43f1-b460-8bf068ecf0b9.html --------------------编程问答-------------------- 每个属性表都建立一个表么。
如:商品表:ID name
   地址属性表:ID Address
   商品地址表:ID 商品Id  地址属性ID

   价格属性表:ID price
   商品价格表:ID 商品id  价格属性ID

........

商品与每个属性都相关联了。但具体查询时,该怎么去做呢?
    --------------------编程问答-------------------- 查询时要用join进行关联查询 --------------------编程问答-------------------- 可以试试做个视图,这样查询的时候不用join很多次~ --------------------编程问答-------------------- 建议做视图,避免很多join --------------------编程问答-------------------- 如果你的商城里价格区间就那么固定几个,你完全没必要为此去建一张表(除非系统要求后台去管理这个)
写个静态方法,绑好价格区间的 RadioButtonList,然后在相应的地方直接调出来,总比查数据库快吧

搜索前,收集每个属性的参数,以GET方式(URL里)向搜索页面传递参数
在搜索页面检索接收到的各属性参数
然后拼接SQL语句(最好利用SqlCommand和SqlParamter封装参数),就可以得到相应的结果了
为了保证效率,建议在你的商品表里那几个重要属性的字段建立索引 --------------------编程问答-------------------- 我试过,当有些商品,在某类属性上没有值时,当用join时,没有任何记录。
比如搜索中,没有价格属性,就只有其他属性,join就不适用了。是否要判断属性是否为空,来判断要关联的表? --------------------编程问答-------------------- 用表管理表的方法  如梦说的是很经典的数据表结构 --------------------编程问答-------------------- 属性不是固定的,是随时更新的。 --------------------编程问答-------------------- 我也考虑建视图了,但当某个商品在某个属性中为空时,视图没有任何记录 --------------------编程问答-------------------- 全部 0元-20元 20元-40元 40元-60元 60元-100元 100元以上 ..

这个区间你需要随时更新?(商品的属性当然是各不相同了)
看下上面“40元-60元”的链接地址:

http://bendi.koubei.com/fuzhou/searchstore--perPrice-40~60---areaCode-3501110000---key-%CB%AE%D6%F3%D3%E3---category-4---address-%BD%FA%B0%B2%C7%F8---subcates-123---cmsHotKey-%C7%E9%C2%C2%D4%BC%BB%E1---distance-5000

对比你原来的URL,其实就一个地方不一样:perPrice-40~60 其他参数都是一样的,这个链接其实就是根据原来的URL更新了一上,这个你可以单独写个静态方法专门做这个事或者在html中拼接,累。。

查询的时候无非就是变了个条件 ...and (price between 40 and 60) and ...
接收的参数每个都判断下,如果没有那个参数或者不符合规定,就不要拼接这一部分的SQL和SqlParamter --------------------编程问答-------------------- --------------------编程问答-------------------- 这个很难吗  --------------------编程问答-------------------- UPPPP --------------------编程问答-------------------- 要是简单,不妨说两句吧。谢谢 --------------------编程问答-------------------- 那如果用Hibernate的话,查询时怎么确定或转换数据类型呀? --------------------编程问答-------------------- 我做查询一直都拼接SQL的,不过SQL的字符串有时会很长,数据在10万的时候暂时还没有什么影响,再大了就不晓得了 --------------------编程问答-------------------- 学习一下。。。。。没做过 --------------------编程问答--------------------

<html>  
<style>  
 .unchecked{  
   border: 1px solid gray;  
   padding: 6px 6px 6px 6px;  
 }  
 .checked{  
   border: 2px solid #c00;  
   padding: 6px 6px 6px 6px;  
 }  
</style>  
<script src="http://code.jquery.com/jquery-1.4.2.min.js" ></script>  
<script type="text/javascript">  
var obj={  
    colorSpan:"",  
      sizeSpan:""  
};  
function change(span)  
{  
    $('span[name="'+$(span).attr('name')+'"]').each(function(){  
             if(this.checked&&this!=span)  
             {  
                 this.className="unchecked";  
                 this.checked=false;  
             }                 
   });  
   obj[$(span).attr('name')]=span.innerHTML;  
   span.className="checked";  
   span.checked=true;  
   select();  
 }  
function select()  
 {  
     var html='';  
    for(var i in obj)  
    {  
          if(obj[i]!='')  
          {  
               html+='<font color=orange>"'+ obj[i]+'"</font> 、';  
            }  
     }  
     html='<b> 已选择:</b> '+html.slice(0,html.length-1);  
    $('#resultSpan').html(html);  
     
 }  
 </script>  
 <body>  
 <br />  
 <div>  
 颜色:  <span class='unchecked'  name='colorSpan' checked='false' onclick='change(this);' >卡其格</span> <span class='unchecked' name='colorSpan' checked='false' onclick='change(this);' >黑白格</span>  
 </div>  
 <br />  
 <br />  
 <div>  
 尺码:  <span class='unchecked'  name='sizeSpan'  checked='false' onclick='change(this);' >S</span> <span class='unchecked' name='sizeSpan' checked='false' onclick='change(this);' >M</span> <span class='unchecked' name='sizeSpan' checked='false' onclick='change(this);' >L</span>  
 </div>  
 <br />  
 <br />  
<div>  
<b>提示:</b>  <span id='resultSpan'></span>  
 </div>  
 </body>  
 </html>  


--------------------编程问答-------------------- 依据客户行为编程,但不需要新建任何表。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 20 楼 sp1234 的回复:
依据客户行为编程,但不需要新建任何表。

sp太深奥,不懂,但我们现在做的有一个用户自定义属性的。。。。。。 --------------------编程问答-------------------- 没什么难的
就是拼SQL语句
if(XX!=null)
strSQl.appendFormat(" and XXXXX='{0}'",XX); --------------------编程问答-------------------- 不需要建立新表,跟客户端进行查询
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,