-1

考虑任何电子商务网站的情况,我们根据零到“n”个约束参数(例如价格、可用性、品牌等)过滤产品结果,其中“n”是允许的最大可能约束数。在这样做的同时,我们也可以添加或删除参数选择(例如,删除价格约束)。

我正在尝试使用 mysql 和 Php 为上述场景制作一个小原型。

我知道我们将使用嵌套查询并继续过滤产品 ID 的选择(在这种情况下为主键)。最终结果可以根据生成的产品 ID 集显示。

我仍然想知道开始这方面的最佳方法是什么。任何帮助将不胜感激。

谢谢!

4

2 回答 2

1

您的回答给人的印象是您的项目中可能需要一个查询构建器类。

它将帮助您准确实现您的意图并保持您的代码干净。

如果您使用的是 Yii 等框架,它已经提供了此功能,对于独立的查询构建器类,请尝试以下操作:

  1. http://www.phpclasses.org/package/2813-PHP-Dynamically-build-SQL-queries.html
  2. https://code.google.com/p/php-query-builder/

免责声明,我没有尝试或测试过任何这些。

这是列表中第二个选项的代码示例:

<?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
于 2013-06-03T11:03:56.153 回答
0

将选择转换为 SQL

基本上,您需要一种将复选框选择转换为 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";
?>

如果您想制作更动态的解决方案

你需要做两件事:

  • 创建一个关联数组,其中键是字段,值是分配给 where 语句的内容。您还可以根据需要使用其他数据结构。
  • 编写一个函数,该函数接受关联数组并创建 where 语句以附加到您的 SQL 语句。
于 2013-06-03T10:57:42.403 回答