Mysql标准查询

时间:2011-05-03 14:10:33

标签: php mysql database

有疑问。如果我向服务器查询我使用这样的东西:

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

如果我向服务器查询并使用两个标准,我会使用以下内容:

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

如果我使用AND,所有标准必须全部填写。但有时我不知道第二个标准,它不会工作。我可以使用OR,但如果我知道两个标准,那么它就不会给我准确的数据。

所以我必须在car ='$ car'(变量)color ='$ color'之间制作somekind变量并使用If语句。像这样的东西 - 如果car ='all'则变量= OR。 因此,当我不知道汽车标准时,我将其保留为“全部”并且我知道颜色标准并选择它“蓝色”然后将显示所有蓝色的汽车。 “所有”就像所有标准一样。

此类事情的任何链接或提示都会有所帮助

谢谢

希望这可以帮助您了解我想要做的事情。

获得数据库哪里有关于汽车的数据。颜色列哪里是汽车颜色。键入coupe,suv,sedan的列。燃料柱在哪里是汽油,柴油,打火石。

用于显示我在html中创建的数据,其中包含3个下拉列表和提交按钮

  1. 全彩色,蓝色,绿色,红色。
  2. Type-all,coupe,suv,sedan。
  3. 燃料 - 全部,汽油,柴油,打火石。
  4. 现在我选择

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

    显示所有蓝色的汽车,如果它们是suv,轿跑车,柴油等无关紧要......(打火石只是例子)

    但是当我选择

    1.color-蓝色 2.type- coupe 3.fuel- all

    并提交

    然后将显示所有蓝色的燃料类型轿跑车。

    我知道如何显示所有数据。 我知道如何显示满足所有标准的数据(使用AND)。喜欢

    1. 颜色 - 蓝色 2.type-妙招 3.fuel-柴油
    2. 现在将显示所有使用柴油的蓝色轿跑车。 但有时我不知道我是否想要看到使用柴油或汽油的蓝色轿跑车。所以,如果我不知道我把它留下“全部”

      也许它解释了一些东西,但是。

2 个答案:

答案 0 :(得分:2)

And的组合将会做。

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

注意:据我所知,MySQL没有任何短路,所以如果我们倾向于AND或组合,我们应该检查性能。另一种选择是使用IF,但标准的排列值不同,有时会使其无法使用。

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

答案 1 :(得分:2)

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

**更新为Matt建议的“内爆”方法。 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”。