当mysql WHERE子句为空时,返回所有行

时间:2012-10-24 08:23:00

标签: php mysql where

$randomvariable=$_GET['randomvariable'];
$search="SELECT * from objects
          WHERE transactiontype='$randomvariable'
          order by id DESC";

现在,如果$randomvariable为空(无),我希望它返回所有行。目前,如果它为空,则不返回任何内容,因为它基本上不会从所有行中搜索任何内容。

8 个答案:

答案 0 :(得分:5)

$randomvariable = ESACPE_MYSQL_STRING($_GET['randomvariable']);
$search =
    "SELECT * FROM objects " .
    (empty($randomvariable) ? "" : "WHERE transactiontype='$randomvariable' ") .
    "ORDER BY id DESC";

其中ESCAPE_MYSQL_STRING是为您正在使用的任何MySQL驱动程序转义字符串的相关函数。

另一种更模块化的方式:

$search = array(
    "select" => "SELECT * FROM objects",
    "where" => "WHERE transactiontype='$randomvariable'",
    "order" => "ORDER BY id DESC"
);

if (empty($randomvariable)) {
    unset($search["where"]);
}

$search = implode(' ', $search);

关于这一点的好处是,您可以轻松地添加,删除或更改任何情况的查询,轻松访问查询的任何部分。


您也可以在SQL中使用CASE()执行此操作,但这有点麻烦,您不应该期望良好的性能:

SELECT * FROM objects
WHERE transactiontype LIKE
    CASE WHEN '$randomvariable' = '' THEN
        '%'
    ELSE
        '$randomvariable'
    END CASE
ORDER BY id DESC

答案 1 :(得分:1)

另一种方法:

if ($_GET['randomvariable'] != "") {
   $where = "transactiontype = " . $randomvariable;
} else {
   $where = "1";
}

$search = "SELECT * from objects WHERE " . $where . " ORDER BY id DESC";

答案 2 :(得分:1)

尝试以下

$randomvariable=mysql_real_escape_string($_GET['randomvariable']);

$where = '';
if($randomvariable){
 $where .= "WHERE transactiontype='{$randomvariable}'";
}

$search="SELECT * from objects ".$where." order by id DESC";

答案 3 :(得分:1)

这里有一些很棒的答案。我有一个可以添加一个简单的解决方案。

当我不需要WHERE子句时,我有时遇到这个问题,因为我没有满足构建我的WHERE子句的任何条件。我喜欢使用的一个简单技巧是:

$sql_statement = "SELECT * FROM ".$table_names." WHERE 1 = 1 ";
if ($array) {
   foreach ($array as $key => $value){  
       $sql_statement .= " AND ".$key." = '".$value."' ";
   }
}

这样,您不需要任何棘手的逻辑或字符串操作,因为1在WHERE子句中始终等于1,并且您可以使循环字符串concats保持相同的格式。你可以明显地扩展这个概念来做更多的事情,但是出于这个问题的目的,这个伪代码只是实现目标的一种简单方法。

答案 4 :(得分:1)

您可以使用IN运算符指示WHERE子句的许多值,并将transactiontype的所有可能值包括为默认参数。

答案 5 :(得分:0)

将其拆分为2个查询:

$randomvariable = $_GET['randomvariable'];
if($randomvariable)
  $search="SELECT * from objects WHERE transactiontype='$randomvariable' order by id DESC";
else
  $search="SELECT * from objects order by id DESC";

答案 6 :(得分:0)

如果你真的需要用SQL而不是用你的语言来做,你可以这样做:

$search="SELECT * from objects WHERE ("" = '$randomvariable' or transactiontype='$randomvariable') order by id DESC";

然而,这不会很好,并且应该首选使用您的语言的IF / ELSE。

答案 7 :(得分:0)

添加一个简单的if语句,检查$ randomvariable是否为null。如果是,则更改查询以返回所有行。

相关问题