php - 我可以根据用户输入更改 mysql 查询,php 吗?

标签 php mysql

我有一种情况是查询依赖于用户输入。如果用户输入 toy,则查询会有一些 OR,如果用户输入 TV,则查询会略有不同。执行此操作的简单方法如下所示。但是,当我有很多不同的产品时,最好的方法是什么?我想创建一个包含所有产品的数组,并在查询中使用 if 条件,但是这是否可行或是否有更好的方法?欣赏。

<?php
if ($toy){
$sql = $wpdb->get_results( $wpdb->prepare("
		SELECT DISTINCT product FROM dis WHERE cat IN (%s, %s, %s)  
AND (val !=%s AND mark='price') 
or (val !=%s AND mark='country') 
or (val !=%s AND mark='shipping') 
or (val !=%s AND mark='quality') 
or (val !=%s AND mark='frequency') 
or (val !=%s AND mark='duration')
	",$a,$b,$c,$d,$e,$f));
}
if($tv){
$sql = $wpdb->get_results( $wpdb->prepare("
		SELECT DISTINCT product FROM dis WHERE cat IN (%s, %s, %s)  
AND (val !=%s AND mark='price') 
or (val !=%s AND mark='country') 
or (val !=%s AND mark='shipping') 
	",$a,$b,$c,$d,$e,$f));
}
/*I have a lot*/
?>

最佳答案

您可以将(产品类型及其参数之间的)映射存储在 PHP 代码或数据库表中。如果您将其存储在 PHP 中:

$mapping = Array(
  'toy' => Array('country', 'shipping', 'quality', 'frequency', 'duration'),
  'tv'  => Array('country', 'shipping')
);

$query = 'SELECT DISTINCT product FROM dis WHERE cat IN (';
foreach($category as $k=>$v) $category[$k] = '"'.mysql_real_escape_string($v).'"';
$query .= implode(',', $category);
$query .= ') AND ((val !="'.mysql_real_escape_string($price).'" AND mark="price") ';
foreach($mapping[$kind] as $v) 
  $query .= ' or (val !="'.mysql_real_escape_string($parameter[$v]).'" AND mark="'.$v.'")';
$query .= ')';
$sql = $wpdb->get_results($query);

查看您的 SQL,我可以假设您有一个包含所有产品的大表 - 每个产品都用许多行表示,一行代表产品的每个参数。这是一个糟糕的设计! 您最好使用 2 个单独的表 - 一个只包含产品(每个产品只有 1 行),另一个表将包含产品参数(使用一对多关系) - 每个参数在不同的行上。

关于php - 我可以根据用户输入更改 mysql 查询,php 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711779/

相关文章:

javascript - 如何使用 Codeigniter 从数据库调用图像?

php - 如何从 Wordpress 插件 PHP 文件自动生成 POT 文件?

php - 如何找出 MySQL 表中的索引

mysql - 如何将数据从oracle数据库迁移到mysql数据库?

mysql解释慢在左侧连接表的位置

php - 在php中处理带有条件的链接

带有级联下拉菜单的 PHP Mysql 提交表单

php - 将 CSV 字符串从 Javascript 传递到 PHP

php - 使用 file_get_contents 解析 html 表到 php 数组

mysql - 如何对字段求和并创建两个具有不同 id 的不同字段