我有一个列名称为“category”的表格。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我用category =做这个然后添加具有类别值的变量。这工作正常。如何查询同一查询中的特定类别或所有类别?
但是,如何在同一查询中选择所有类别?
我试过使用null和''作为类别值,但这并没有工作。将整个代码部分复制到另一个查询可能会创建spagetti代码,因此我想知道是否有更好的选择。在那儿?
谢谢!
我有一个列名称为“category”的表格。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我用category =做这个然后添加具有类别值的变量。这工作正常。如何查询同一查询中的特定类别或所有类别?
但是,如何在同一查询中选择所有类别?
我试过使用null和''作为类别值,但这并没有工作。将整个代码部分复制到另一个查询可能会创建spagetti代码,因此我想知道是否有更好的选择。在那儿?
谢谢!
大厦,这将是简单的使用查询像
$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);
}
假设您有一个自动生成的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是什么产品
我不明白这一点呢。您两次使用$类别,$ category = 0将选择不是全部的特定类别。我错过了什么? – Arjen
我现在已经明白了,但您的解决方案无法正常工作。 OR部分始终执行。我想要一个特定的类别,如果指定其他所有类别。 – Arjen
如果您不想为所有类别指定0(零),则可以将查询修改为如下所示: $ query =“SELECT * FROM table WHERE category = $ category OR”。 (!empty($ category)?$ category:“0”)。“= 0”; –