2013-10-06 37 views
1

我有一个列名称为“category”的表格。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我用category =做这个然后添加具有类别值的变量。这工作正常。如何查询同一查询中的特定类别或所有类别?

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

我试过使用null和''作为类别值,但这并没有工作。将整个代码部分复制到另一个查询可能会创建spagetti代码,因此我想知道是否有更好的选择。在那儿?

谢谢!

回答

0

大厦,这将是简单的使用查询像

$query = "SELECT * FROM table WHERE category = ? OR 1 = ?;" 

然后通过你的$类别为第一个参数,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); 
} 
0

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

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

当您想要“所有类别”时,只需将值0传递给您的$ category变量即可。

如果你不想通过为$类的值,而是希望能够通过一个空白$类别,你可以$类别设置为0您构建查询字符串之前:

$ category =(empty($ 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;”在@JamesMarks是什么产品

+0

我不明白这一点呢。您两次使用$类别,$ category = 0将选择不是全部的特定类别。我错过了什么? – Arjen

+0

我现在已经明白了,但您的解决方案无法正常工作。 OR部分始终执行。我想要一个特定的类别,如果指定其他所有类别。 – Arjen

+0

如果您不想为所有类别指定0(零),则可以将查询修改为如下所示: $ query =“SELECT * FROM table WHERE category = $ category OR”。 (!empty($ category)?$ category:“0”)。“= 0”; –

相关问题