我已经使用具有 LIKE 子句且两侧带有 % 通配符的查询实现了搜索。
我有一列包含国家/地区名称。如果我用 P 或 PAK 搜索,它会显示结果,但如果我用“我住在巴基斯坦”搜索,它不会进行比较。
我的理解是它与子字符串匹配。
是否可以反之亦然,就像我传递字符串“我住在巴基斯坦”一样,它与字段中的字符匹配并得到巴基斯坦的结果。
即时帮助将不胜感激。
最佳答案
您可以使用 codeigniter 框架中的 like() 函数。
$this->db->like();
此函数使您能够生成 LIKE 子句,这对于执行搜索很有用。
Note: All values passed to this function are escaped automatically.
简单的键/值方法: $this->db->like('标题', '匹配');
// Produces: WHERE title LIKE '%match%'
如果您使用多个函数调用,它们将通过 AND 链接在一起:
$this->db->like('title', 'match');
$this->db->like('body', 'match');
// WHERE title LIKE '%match%' AND body LIKE '%match%
如果要控制通配符 (%) 的放置位置,可以使用可选的第三个参数。您的选项有“之前”、“之后”和“两者”(这是默认值)。
$this->db->like('title', 'match', 'before');
// Produces: WHERE title LIKE '%match'
$this->db->like('title', 'match', 'after');
// Produces: WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both');
// Produces: WHERE title LIKE '%match%'
如果您不想使用通配符 (%),您可以将选项“none”传递给可选的第三个参数。
$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');
i think in $countries you will have all the needed result.
关于php - 使用 LIKE 的 SQL 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370638/