Php 使用LIKE搜索SQL查询

Php 使用LIKE搜索SQL查询,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我已经使用两边都有%通配符的查询having子句实现了搜索 我有一个列有国家的名字。如果我用P或PAK搜索,它会显示结果,但如果我用“我住在巴基斯坦”搜索,它不会比较 我理解的是它与子字符串匹配 是否可以使其反之亦然,如我传递字符串“我住在巴基斯坦”,它与字段中的字符匹配,并获得巴基斯坦的结果 如能立即提供帮助,将不胜感激 您可以用逗号替换空格,然后使用。假设您的字符串为“代码> $STR ,请考虑此查询: SELECT * FROM countries c WHERE c.name LI

我已经使用两边都有%通配符的查询having子句实现了搜索

我有一个列有国家的名字。如果我用P或PAK搜索,它会显示结果,但如果我用“我住在巴基斯坦”搜索,它不会比较

我理解的是它与子字符串匹配

是否可以使其反之亦然,如我传递字符串“我住在巴基斯坦”,它与字段中的字符匹配,并获得巴基斯坦的结果


如能立即提供帮助,将不胜感激

您可以用逗号替换空格,然后使用。假设您的字符串为“代码> $STR ,请考虑此查询:

SELECT *
FROM   countries c
WHERE  c.name LIKE '%$str%' OR
       FIND_IN_SET(c.name, REPLACE($str, ' ', ',')) > 0
试试这个

public function searchCountry($value)
{
    $value = $value;
    $query = $this->db->query("SELECT * FROM table_name WHERE country LIKE '%$value%' ");
    $result = $query->result_array();
    return $result;
}
这可能有效(免责声明:未测试):

但是您可能应该使用@Mureinik solution。

您可以使用codeigniter框架中的like()函数

$this->db->like();
此函数使您能够生成LIKE子句,用于执行搜索

注意:传递给此函数的所有值都将自动转义

简单键/值方法: $this->db->like('title','match')

如果使用多个函数调用,它们将被链接在一起并在它们之间:

    $this->db->like('title', 'match');
    $this->db->like('body', 'match');

    // WHERE title LIKE '%match%' AND body LIKE '%match%
如果要控制通配符(%)的放置位置,可以使用可选的第三个参数。您的选项有“before”、“after”和“both”(默认设置)

如果不想使用通配符(%),可以将选项“无”传递给可选的第三个参数

    $this->db->like('title', 'match', 'none');
    // Produces: WHERE title LIKE 'match' 

我认为你需要的是搜索和比较提供的文本中的每个单词,我认为这将是有益的

$temp = array();
$str = array();
$str = explode(' ', $string);
foreach ( $str as $word) {
    if (strlen($word) > 2) {
        $this->db->or_like('country_name', $word, 'both');
    } else {
        continue;
    }
}
$countries = $this->db->get('countries');
我认为在美元国家,你会得到所有需要的结果


为此,可以使用正则表达式技巧:

where country regexp replace($str, ' ', '|')
这构造了表达式:

where country regexp 'I|live|in|Pakistan'

由于正则表达式的规则,其计算结果为true。

示例数据、所需结果,您尝试过的查询将澄清您正在尝试执行的操作。我正在使用SELECT*FROM表,其中的国家(如“%Pak%”)为我提供正确的结果,并显示包含国家巴基斯坦的所有行,但我希望在将其与“我爱巴基斯坦”进行比较时进行搜索,因为这句话还包含巴基斯坦谢谢您再指向一个国家功能:)问题:有没有办法标记/避免在集合中使用1和2个字母的单词?@Tpojka不太清楚你的意思。你们能详细说明一下吗?若你们检查一下我提供的PHP解决方案,你们会发现避免使用短词。例如,我的代码中的
$value=“a country servia”
将被避免,因为它可以在许多不想要的结果中找到。当然,对于country表不太需要,因为它的内容是~200个结果,但需要通用的mysql方式解决方案。
$temp = array();
$str = array();
$str = explode(' ', $string);
foreach ( $str as $word) {
    if (strlen($word) > 2) {
        $this->db->or_like('country_name', $word, 'both');
    } else {
        continue;
    }
}
$countries = $this->db->get('countries');
where country regexp replace($str, ' ', '|')
where country regexp 'I|live|in|Pakistan'