如何查询同一查询中的特定类别或所有类别?

时间:2013-10-06 17:26:50

标签: mysql sql

我有一个列名为“category”的表。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我这样做类别=?然后使用类别值添加变量。这很好。

但是,如何在同一查询中选择所有类别?

我尝试使用null和''作为类别值,但这不起作用。使用另一个查询复制整个代码部分可能会创建spagetti代码,因此我想知道是否有更好的选项。有吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在@JamesMarks提供的基础上,使用像

这样的查询会更简单
$query = "SELECT * FROM table WHERE category = ? OR 1 = ?;"

然后传递$ category作为第一个参数,并将1或0作为第二个参数。如果您传递1,则第二个词将变为1 = 1。这总是正确的,所以整个表达总是如此。如果你传递0,那么第二个术语是1 = 0并且它总是假的,但是只有当category = $category匹配时整个表达式才会为真。

这比为“任何类别”指定特殊值0更简单,更好。

另一种解决方案是动态构建查询:

$where = array();
if ($category) {
    $where[] = "category = ?";
    $params[] = $category;
}

... perhaps add more terms to $where conditionally ...

$query = "SELECT * FROM table";
if ($where) {
    $query .= " WHERE " . implode(" AND ", $where);
}

答案 1 :(得分:0)

假设您有一个自动生成的ID(AUTO_INCREMENT或IDENTITY,具体取决于您的数据库引擎),您可以使用类似于以下内容的WHERE子句。

$ query =“SELECT * FROM table WHERE category = $ category OR $ category = 0;”

如果需要“所有类别”,只需将值0传递给$ category变量。

如果您不想传递$ category的值,而是希望能够传递空白的$ category,则可以在构建查询字符串之前将$ category设置为0:

$ category =(空($ category)?“0”:$ category); $ query =“SELECT * FROM table WHERE category = $ category OR $ category = 0;”;

...或者您可以在一行上重写,如下所示。

$ query =“SELECT * FROM table WHERE category = $ category OR”。 (空($ category)?“0”:$ category)。 “= 0;”