php - 搜索多个字段 MySQL

标签 php mysql search pdo

我有这样一个数据库:

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: 有点难以解释,但我有一个表格。我只想有一个必填字段,其他两个是可选的,但如果我还填写另外一个或两个其他字段,它们就像一个过滤器。

因此名称字段是必需的(在表单中)。如果我只填写名称字段,它将只选择 where name = :name。 如果我填写姓名 + 型号,它将选择名称 = :name AND model = :model。 等等……

感谢您的帮助。

最佳答案

我不确定你所说的“空白”是什么意思,但假设你的意思是 NULL,你可以这样做:

SELECT *
FROM items
WHERE (:name IS NULL OR name = :name) AND
      (:model IS NULL OR model = :model) AND
      (:type IS NULL OR type = :type);

这个查询的问题在于,由于 条件,MySQL 很难为其使用索引。如果你有大量的数据,并且想使用索引,那么你应该根据实际有数据的参数构造where子句。

关于php - 搜索多个字段 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29584719/

相关文章:

php - 一次插入多个值并同时检查重复值

algorithm - 包含每个子字符串的 dict 单词数

用于搜索和搜索结果的 RESTful MVC 模式

php - 两个菱形问号而不是倒置感叹号

php - Laravel Echo 服务器在浏览器中没有响应

php - 重新排列 php 关联数组

php - 如果条件在多行中匹配,则从映射表中获取数据

mysql - 为什么我不能添加由两列组成的外键?

MySql 选择、替换、INSTR

c - 在 C 中使用 strstr 函数搜索文本