gpt4 book ai didi

php - MySQL 使用 WHERE、LIKE、OR 和 AND 选择

转载 作者:行者123 更新时间:2023-11-29 08:10:33 24 4
gpt4 key购买 nike

我正在尝试按公司名称或客户名称(名字和姓氏)搜索客户数据库。但我还需要根据它们是否处于事件/非事件/删除状态进行搜索。但我的查询似乎忽略了最后 1 或 2 个 AND 语句。

这是我到目前为止所拥有的:

    if($type == 'deleted') {
$sql = "SELECT * FROM `".self::$table_name."`
WHERE `company_name` LIKE '%{$id}%'
OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%'
AND `deleted` = '1'";
} elseif($type == 'inactive') {
$sql = "SELECT * FROM `".self::$table_name."`
WHERE `company_name` LIKE '%{$id}%'
OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%'
AND `deleted` = '0' AND `status` = 'inactive'";
} else {
$sql = "SELECT * FROM `".self::$table_name."`
WHERE `company_name` LIKE '%{$id}%'
OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%'
AND `status` = 'active' AND `deleted` = '0'";
}

我传递了一个类型,该类型要么是事件的、非事件的,要么是已删除的。如果没有任何内容通过,它将默认为事件状态。但是,因为我需要搜索公司名称,或者名字和姓氏的 CONCAT,所以它似乎忽略了最后几个 AND 语句。

当我搜索“非事件”时,它会带来一些结果,但包括事件/非事件/已删除的结果。我哪里错了?我知道这一定与 OR 有关,但我该如何解决它?

最佳答案

if($type == 'deleted') {
$sql = "SELECT * FROM `".self::$table_name."` WHERE ( `company_name` LIKE '%{$id}%' OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%' ) AND `deleted` = '1'";
} elseif($type == 'inactive') {
$sql = "SELECT * FROM `".self::$table_name."` WHERE ( `company_name` LIKE '%{$id}%' OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%' ) AND `deleted` = '0' AND `status` = 'inactive'";
} else {
$sql = "SELECT * FROM `".self::$table_name."` WHERE ( `company_name` LIKE '%{$id}%' OR CONCAT(first_name, ' ', last_name) LIKE '%{$id}%' ) AND `status` = 'active' AND `deleted` = '0'";
}

将 OR 条件放入 () 内,后跟 AND 语句。

关于php - MySQL 使用 WHERE、LIKE、OR 和 AND 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com