考虑任何电子商务网站的情况,我们根据零到'n'个数量的约束参数(如价格,可用性,品牌等)过滤产品结果,其中'n'是允许约束的最大可能数量。在这样做的同时,我们也可以添加或删除参数选择(例如,删除价格约束)。
我正在尝试使用mysql和Php为上述场景制作一个小型原型。
我知道我们将使用嵌套查询并继续过滤产品ID的选择(在这种情况下为主键)。可以根据生成的产品ID集显示最终结果。
我仍然想知道开始这个的最佳方法是什么。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
您的回答给人的印象是您可能需要在项目中使用查询构建器类。
它将帮助您完全达到预期目的并保持代码清洁。
如果你正在使用Yii这样的框架,它已经为独立的查询构建器类提供了这个功能,请试试这些:
免责声明,我没有尝试或测试任何这些。
以下是列表中第二个选项的代码示例:
<?php
require_once './QueryBuilder.php';
$qb = QueryBuilder::create()
->select(array('column1', 'alias' => 'column2'))
->from('mytable as mt')
->join('another_table at', 'on', 'at.id = mt.fk_at_id')
->where('mt.status = 1')
->group('mt.group_field')
->order('mt.date_field desc')
->limit(15);
// when printed, gives the following query:
// SELECT column1,column2 as alias
// FROM mytable as mt
// JOIN another_table as at on at.id = mt.fk_at_id
// WHERE mt.status = 1
// GROUP BY mt.group_field
// ORDER BY mt.date_field as desc
// LIMIT 15
答案 1 :(得分:0)
基本上,您需要一种方法将复选框选择转换为where语句。 这里描述了这个概念的一个非常基本的例子:https://stackoverflow.com/a/14761616/1688441
引用(最简单的示例):
<?php
$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];
if($location!=""){
$where[] = " `location` = '".mysql_real_escape_string($location)."'";
}
if($language!=""){
$where[] = " `language` = '".mysql_real_escape_string($language)."'";
}
if($name!=""){
$where[] = " `name` = '".mysql_real_escape_string($name)."'";
}
$where_clause = implode(' OR ', $where);
//same code for the other 2 options
$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";
?>
你需要做两件事: