检查是否在mySQL的多列中找到了一个字符串

时间:2009-11-26 15:52:56

标签: sql mysql

我需要检查是否在一列或多列中找到了字符串。

基本上,我有一个程序可以让你检查多个字段(姓名,姓氏等)

如果同时检查名称和姓氏,并且用户只输入名称,例如chris,则很容易在mySQL中使用LIKE参数进行检查,如下所示:

select * from tblClients WHERE name LIKE '%john%';

这显然有效。但是,我需要做的是,如果同时检查名称和姓氏,它将执行以下操作:

select * from tblClients WHERE (name or surname) LIKE '%john%';

我希望如果在有一个名为john doe的客户端时生成此逻辑,则第二个命令仍会找到该客户端。

我尝试了这个命令并且没有找到语法错​​误,但是返回0结果。

请问任何建议吗?

6 个答案:

答案 0 :(得分:4)

你不能只使用单独的WHERE子句,例如:

SELECT * FROM tblClients
WHERE (name LIKE '%john%')
OR (surname LIKE '%john%')

您必须根据用户选择的列修改SQL。

答案 1 :(得分:3)

你需要这样做:,因为SQL会阻塞(姓名或姓氏)部分

select * from tblClients WHERE name LIKE '%john%' or surname LIKE '%john%';

我不确定你使用的语言是什么,但是在伪代码中,你可以通过简单的功能使这更容易

query = [whatever you are searching for]
var columns = array('name', 'surname')
var where = array
foreach columns as column
    where[] = column + ' like "%' + query + '%"'

sql = "select * from tblClients WHERE " + join(where, ' OR ');

//where join joins values of an array into a string

答案 2 :(得分:3)

您可以连接列:

,而不是使用单独的LIKE子句
select * 
from tblClients 
WHERE name || surname LIKE '%john%'

这留下了一些边缘情况(name ='jo'和surname ='hn'将匹配),如果你担心这个,你可以在列之间添加一个分隔符

WHERE name || ' ' || surname LIKE '%john%'

我不确定这两个选项对性能的影响,但是在开始和结束时使用百分比的LIKE将不会使用索引,因此我认为不存在问题。

答案 3 :(得分:3)

我建议在OR上使用UNION - OR因性能不佳而臭名昭着,如果没有正确理解则存在风险维护问题:

SELECT c.* FROM tblClients c WHERE c.name LIKE '%john%'
UNION
SELECT c.* FROM tblClients c WHERE c.surname LIKE '%john%'

请注意,UNION会返回一个不同的列表 - 重复项将被删除,但效果会比使用UNION ALL删除重复项)慢。使用适合您目的的

答案 4 :(得分:1)

此示例列NAME和SURNAME一个查询,1个空格中间。

    $Sql="SELECT * FROM customers WHERE CONCAT(NAME,' ',SURNAME) LIKE '%".$query."%' ";

//NAME = İSA
//SURNAME = ABC
//Query = İSA ABC

一个查询查找。 mysql 2 columt 1 query

答案 5 :(得分:0)

我设法编程了。

这是我做的:

$like = "";

foreach ($fields as $field)
{
    if ($like == "")
    {
        $like = $field . " LIKE '%" . $query . "%' or ";
    }
    else
    {
        $like = $like . $field . " LIKE '%" . $query . "%' or ";
    }
}

$like = substr_replace($like, "", -3);

这样,所有在for循环中插入并附加到字符串的OR。然后我编写了这样的SQL字符串:

$sql  = "select * ";
$sql .= " from $table where  " . $like

希望这有助于其他人:)

感谢您的帖子。