2011-05-03 180 views
0

有问题。如果我查询到服务器,我用这样的:Mysql条件查询

mysql_query("select * FROM test WHERE car = '$car'); 

如果我查询到服务器,并使用两个准则我用这样的:

mysql_query("select * FROM test WHERE car = '$car' and color ='$color'); 

如果我使用和所有标准的必须是全满。但有时我不知道第二个标准,它不会工作。我可以使用或然而,如果我知道这两个标准的话,那么它不会给我准确的数据。

所以,我必须在car ='$ car'(variable)color ='$ color'之间做些somekind变量,并使用If语句。像这样 - 如果car ='all'则变量= OR。 因此,当我不知道汽车标准,我把它留在“全部”,我知道颜色标准,并选择它“蓝色”,那么所有蓝色的车辆将被显示。 “全部”就像所有标准一样。

这有点儿事任何链接或提示将帮助

谢谢

希望这有助于你了解我尝试做。

有数据库在哪里有关汽车的数据。颜色列在哪里是汽车的颜色。类型列轿车,SUV,轿车。燃料柱在哪里是汽油,柴油,石块。

对于显示的数据我取得了HTML表单,进行了3​​名下拉列表和提交按钮

  1. 颜色全,蓝,绿,红。
  2. 类型 - 所有,coupe,suv,轿车。
  3. 燃油全部,汽油,柴油,燧石。

现在,当我选择

1.color-蓝色。 2.type- all。 3.全部。

都表明是蓝色的所有汽车,不要紧,如果他们是SUV,轿跑车,柴油等等......(打火石只是例子)

,但是当我选择

1.颜色 - 蓝 2.type-轿跑车 3.fuel-所有

,并提交

那么所有燃料型双门轿跑车是蓝色会显示出来。

我知道如何显示所有数据。 我知道如何显示符合所有标准的数据(使用AND)。像

  1. color-蓝色 2.type-政变 3.fuel-柴油

现在是在柴油运行的所有蓝色小轿车将被显示。 但有时我不知道我是否想看到在柴油或汽油上运行的蓝色跑车。所以,如果我不知道我把它留在“所有”

也许它解释了一些,但ty。

+1

您是否可以重新阅读您的问题,并尝试以对其他人更具可读性的方式重新修改该问题?没有阅读3次就很难理解你的问题。 – 2011-05-03 14:14:15

+0

除了改写之外,一些数据表格还有预期的结果。你应该得到一个答案**非常快**这种方式 – 2011-05-03 14:16:13

回答

2

该代码将基于已知值添加“WHERE”条件。它可能不是这个特定问题的最快解决方案,但它很容易扩展。

**如Matt所示,更新为“implode”方法。 H **

$sql = "SELECT * FROM test"; 
$conds = array(); 
if($car) { 
    $conds[] = "car = '$car'"; 
} 
if($color) { 
    $conds[] = "color = '$color'"; 
} 
// More conditions can be added if needed 

// Creating a WHERE string by imploding: 
if(count($conds) > 0) { 
    $where = implode(" AND ",$conds); 
    $sql .= " WHERE ".$where; 
} 

mysql_query($sql); 

如果您没有任何条件,它将只是“SELECT * FROM test”。

+0

一个好方法,但不是foreach/counter,只是用“OR”打开$ conds,然后用“WHERE”前缀。 – 2011-05-03 14:28:29

+0

并使用**'AND' **,而不是'OR'! – 2011-05-03 16:25:38

2

组合和或会做。

WHERE color = '$color' AND (car ='$car' OR '$car' = 'all') 

注:根据我所知的MySQL不会做任何短路,所以如果我们倾向于和or组合,我们应该检查的性能。另一种选择是使用IF,但标准不同值的排列有时使得不可能使用IF。

另一种方法是创建一个动态查询,并只包含那些所需的过滤器。

+0

但如果我有3个标准呢?我不能用这种方式? – rookie 2011-05-03 14:16:10

+0

那么你几乎可以实现任何你想要的逻辑。给出一个3个标准的例子...然后我们可以检查.... – 2011-05-03 14:17:41

+0

你可以像'(a ='$ a'或'$ a'='all')和(b ='$ b'或' $('='''')AND(c ='$ c'或'$ c'='all')AND'等等...... – Thai 2011-05-03 14:29:11