- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个多级搜索,以允许用户根据品牌、产品类别和价格范围(顺序无关)优化相同的搜索。
以下实现可能无法按原样工作,因为我只是提供一种方法来说明我的问题。
表格:产品展示
| id | name | price_id |
| 1 | test1 | 1 |
| 2 | test2 | 2 |
| 3 | test3 | 1 |
价格范围
| id | price_from | price_to |
| 1 | 100 | 200 |
| 1 | 200 | 300 |
产品属性
| product_id | id_attribute |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 5 |
| 2 | 5 |
| 2 | 3 |
| 3 | 5 |
属性
| id | name |
| 1 | attr1 |
| 2 | attr2 |
| 3 | attr3 |
| 4 | attr4 |
| 5 | attr5 |
| 6 | attr6 |
| 7 | attr7 |
我通过 $_GET 传递 url 中的参数。我的多重过滤器搜索代码看起来有点像这样:
//this generates the base query
$dynamicsql = get_by_filters();
//does the group by to discard duplicated products
$filtersql= $dynamicsql."group by p.id";
$query = mysql_query($filtersql) or die(mysql_error());
//the data is now ready to be presented but
$total = mysql_num_rows($query);
for($i=0; $i<$total; $i++):
$prods[$i] = mysql_fetch_object($query);
endfor;
//first let's build the html code for filtering the results
list_prices_filter($dynamicsql);
//i'll only show the code for the bellow function. the above is pretty similar
list_attr_filter($dynamicsql);
//now i print the results
foreach($prods as $prod):
//for the porpuse of this question will only print the product name
echo $prod['pname'];
endforeach;
返回过滤后的基本查询的函数
function get_by_filters(){
$dynamicsql = "SELECT p.name as pname,p.price_from,p.price_to,a.name,a.id FROM `products` p ";
$dynamicsql .= "left JOIN `price_ranges` pr ON p.price_id = pr.id ";
$dynamicsql .= "LEFT JOIN `product_attributes` pa ON w.id = pa.product_id ";
$dynamicsql .= "LEFT JOIN `attributes` a ON a.uid = pa.id_attribute where 1=1 ";
foreach($_GET as $parameter=>$value):
switch($parameter):
case 'price':
$dynamicsql .= " AND p.price = ".$value;
break;
//filtro por zip code
case 'attr':
$dynamicsql .= " AND a.id = ".$value;
break;
default:
$dynamicsql .= "AND ".$parameter." = ".$value." ";
break;
endswitch;
endforeach;
return $dynamicsql;
}
列出属性选择的函数:
function get_special_care($dynamicsql){
$sql = "SELECT * FROM attributes a";
$query = mysql_query($sql);
$total = mysql_num_rows($query);
$output = '<ul>';
for($i=0; $i<$total;$i++):
$result[$i] = mysql_fetch_object($query);
$active = ($_GET['attr'] == $result[$i]->uid) ? 'active':'';
$workerstotal = mysql_query($dynamicsql . " and a.id ={$result[$i]->uid} group by p.id");
$totalworkers = mysql_num_rows($workerstotal);
$output .= '
<li class="'.$active.'">
<a href="'.url_increment('attr='.$result[$i]->uid).'">'.$result[$i]->name.'<span class="totalfound">('.$totalworkers.')</span></a>
<a title="Remove" href="'.url_decrement('attr').'" class="remove-criteria"><img src="'image_src_url" alt="Remove" /></a>
</li>';
endfor;
$output .= '</ul>';
echo $output;
}
函数 url_increment() 和 url_decrement 只是在 url 中添加或删除该过滤器。我没有列出它,因为我认为它与问题无关。
好了介绍完毕!!我的问题是,如果用户在第一步中选择属性 5,代码会显示产品 1、2 和 3,但我无法再次过滤属性!
在本例中,函数 get_special_care($dynamicsql) 表示属性 1、2(产品 1 应该有一个)和 3(产品 1 和 2 应该有两个匹配项)有 0 个产品。
我几乎可以肯定这是因为生成基本查询的函数:
case 'attr':
$dynamicsql .= " AND a.id = ".$value;
break;
default:
但我不知道如何解决这个问题。
此代码还存在另一个问题,因为一旦您第一次选择该属性,URL 看起来像 www.teste.com/search&attr=5。第二次点击后(假设用户点击属性 1),网址将是 www.teste.com/search&attr=5&attr=1,这也是一个问题(我认为)
有人可以帮忙吗?我确信你们中的许多人都实现了类似的算法,如果您能提供帮助,那就太好了。
最后很抱歉这篇长文,但我想解释一下自己,也许它可以作为 future 帮助的引用......
提前致谢!!
最佳答案
到目前为止我能发现的唯一错误是
case 'price': $dynamicsql .= " AND p.price = ".$value;
p.price 指 products.price,其中您的原始产品表中没有价格字段。
是否有查询异常?
关于php - 基于多级过滤的细化搜索结果 Mysql + PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920595/
我正在尝试缩小此图像,但它会不断失真。 这是我应用细化的相关代码。我也尝试过使用“thin”功能而不是“skeletonize”,但结果相似。 from skimage.morphology impo
好的,据我所知,目前我们有两种方法 首先是我可以在给定脚本中使用的一些 javascript。但这会关闭所有内容的右键单击。 window.oncontextmenu = function() {
在 MarkLogic 中如何找到元素所在的文档 URI 匹配的值为1742 这里是示例 XML 文档: 1742 1742 TT 1742
摘要:我有一个数据集,其收集方式使得维度最初不可用。我想获取本质上是一大块无差别的数据,并为其添加维度,以便可以对其进行查询、子集化等。这是以下问题的核心。 这是我拥有的 xarray 数据集: D
我有一个大型数据集(请参阅下面的示例格式),我需要进行以下思考: 确定第 1、2、5 列中出现的重复值 - 如果全部重复,那么我需要删除多余的行并对第 8 列中的值进行平均(这对于我将发布的代码是成功
我正在做一个练习项目,其中 iOS 应用程序打印来自 jsonplaceholder.typicode.com 的/posts 列表,当用户选择一个时,加载详细 View Controller 并显示
module Access def last self[-1] end def start_end self[0] + last end end module Stri
我是一名优秀的程序员,十分优秀!