按可能未设置的多个列在数据库 table 中搜索
search in database table by multiple column that maybe not set
我有一个包含任意列的数据库 table。 UI 页面中有 3 个表单输入,用户可以通过这些输入在 table 中搜索值。用户可以为其中一列(输入)、两列或所有列插入值。意味着其中一个或两个输入值可能为空,用户不会将它们用于他的搜索。
如何创建搜索查询?因为下面的代码有问题。如果用户没有插入所有 3 列的值,则此查询将出错。
$query="SELECT * FROM insurance WHERE nationalCode=:nationalCode AND insuranceNumber=:insuranceNumber
AND insuranceType=:insuranceType;";
换句话说,我需要在 table 中搜索 3 列,如果 3 这些列的值由用户定义,否则如果用户有 2 列的插入值,搜索将通过这两列 &如果用户只有 1 个列的插入值,则搜索将按该 1 列执行。
如果用户没有插入值,例如 nationalCode
,我假设您将 NULL
(或空字符串?)作为 :nationalCode
传递,在这种情况下,您的条件应为:
nationalCode = :nationalCode OR :nationalCode IS NULL
或:
nationalCode = :nationalCode OR :nationalCode = ''
所以对于所有列,语句应该是:
SELECT *
FROM insurance
WHERE (nationalCode = :nationalCode OR :nationalCode IS NULL)
AND (insuranceNumber = :insuranceNumber OR :insuranceNumber IS NULL)
AND (insuranceType = :insuranceType OR :insuranceType IS NULL);
亲爱的@forpas 我已经使用了你的查询但没有成功。但是您提供的查询中的微小变化已经到达了我的黄金。
我使用了你的两个代码:
国家代码 = : 国家代码或 : 国家代码 = ''
和
nationalCode = :nationalCode 或 :nationalCode 为空
事实上,我将您建议的查询更改如下:
$query="SELECT * FROM insurance WHERE
(nationalCode=:nationalCode OR :nationalCode IS NULL OR :nationalCode='') AND
(insuranceNum=:insuranceNum OR :insuranceNum IS NULL OR :insuranceNum='') AND
(insuranceType=:insuranceType OR :insuranceType IS NULL OR :insuranceType='');";
非常感谢您的帮助。
我有一个包含任意列的数据库 table。 UI 页面中有 3 个表单输入,用户可以通过这些输入在 table 中搜索值。用户可以为其中一列(输入)、两列或所有列插入值。意味着其中一个或两个输入值可能为空,用户不会将它们用于他的搜索。 如何创建搜索查询?因为下面的代码有问题。如果用户没有插入所有 3 列的值,则此查询将出错。
$query="SELECT * FROM insurance WHERE nationalCode=:nationalCode AND insuranceNumber=:insuranceNumber
AND insuranceType=:insuranceType;";
换句话说,我需要在 table 中搜索 3 列,如果 3 这些列的值由用户定义,否则如果用户有 2 列的插入值,搜索将通过这两列 &如果用户只有 1 个列的插入值,则搜索将按该 1 列执行。
如果用户没有插入值,例如 nationalCode
,我假设您将 NULL
(或空字符串?)作为 :nationalCode
传递,在这种情况下,您的条件应为:
nationalCode = :nationalCode OR :nationalCode IS NULL
或:
nationalCode = :nationalCode OR :nationalCode = ''
所以对于所有列,语句应该是:
SELECT *
FROM insurance
WHERE (nationalCode = :nationalCode OR :nationalCode IS NULL)
AND (insuranceNumber = :insuranceNumber OR :insuranceNumber IS NULL)
AND (insuranceType = :insuranceType OR :insuranceType IS NULL);
亲爱的@forpas 我已经使用了你的查询但没有成功。但是您提供的查询中的微小变化已经到达了我的黄金。 我使用了你的两个代码: 国家代码 = : 国家代码或 : 国家代码 = '' 和 nationalCode = :nationalCode 或 :nationalCode 为空 事实上,我将您建议的查询更改如下:
$query="SELECT * FROM insurance WHERE
(nationalCode=:nationalCode OR :nationalCode IS NULL OR :nationalCode='') AND
(insuranceNum=:insuranceNum OR :insuranceNum IS NULL OR :insuranceNum='') AND
(insuranceType=:insuranceType OR :insuranceType IS NULL OR :insuranceType='');";
非常感谢您的帮助。