【发布时间】:2026-01-25 22:25:02
【问题描述】:
我有一个这样的数据库:
ID | Name | Model | Type
1 | Car | 4 | C
2 | Bar | 2 | B
3 | Car | 4 | D
4 | Car | 3 | D
还有这样的表格:
Name :
Model :
Type :
现在,我只想搜索名称,例如“Car”,它会返回第 1、3、4 行。(我将 Model 和 Type 留空)
如果我在 Name 中搜索“Car”,在 Model 中搜索 4,它会返回第 1、3 行。(我将 Type 留空)
如果我在 Name 中搜索“Car”,在 Type 中搜索“D”,它会返回第 3、4 行(我将 Model 留空)
是否可以在一个查询中执行此操作?
这就是我所拥有的:
SELECT *
FROM items
WHERE (:name IS NOT NULL AND name = :name)
AND (:model IS NOT NULL AND model = :model)
AND (:type IS NOT NULL AND type = :type)
但它不起作用。 我只想在 3 个字段中填写 2 个,并且“WHERE”会适应并忽略空白字段。
编辑 1: 这有点难以解释,但我有一个表格。我只想有一个必填字段,另外两个是可选的,但如果我还填写另外一个或两个其他字段,它们就像一个过滤器。
所以名称字段是必需的(在表单中)。如果我只填写名称字段,它将仅选择名称 = :名称。 如果我填写名称+模型,它将选择名称=:名称和模型=:模型。 等等……
感谢您的帮助。
【问题讨论】:
-
使用
OR而不是AND作为附加参数。(:name IS NOT NULL AND name = :name) OR (:model IS NOT NULL AND model = :model) -
您也可以将
where设为变量,然后通过条件仅添加您需要的值,并在条件中进行绑定。 -
@chris85 谢谢克里斯。 OR 的问题是,如果我在 Name 中搜索 Car 并在 Model 中搜索 4,甚至第 4 行(Car - 3)也会出现......