我可以改变mysql查询取决于用户输入,php?

时间:2016-08-02 04:29:42

标签: php mysql

我有一种情况是查询取决于用户输入。如果用户输入玩具,那么查询将有一些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*/
?>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您可以在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我可以假设您有一个适用于所有产品的大表 - 每个产品都有很多行,每行产品都有一行。这是 BAD设计! 您最好使用2个单独的表 - 一个仅包含产品(每个产品只有一行),另一个表将包含产品参数(使用ONE-to-MANY关系) - 每个参数位于不同的行上。