我已經使用具有LIKE子句的Query在兩側都使用%通配符實現了搜索。SQL使用LIKE搜索查詢
我國傢俱有列名。如果我用P或PAK搜索它會顯示結果但是如果我用'我住在巴基斯坦'搜索它,它不會比較。
我明白的事情是它與子字符串相匹配。
是否有可能使其反之亦然像我傳遞字符串「我住在巴基斯坦,並與字符相匹配的字段,並得到巴基斯坦的結果。
即時幫助將不勝感激。
我已經使用具有LIKE子句的Query在兩側都使用%通配符實現了搜索。SQL使用LIKE搜索查詢
我國傢俱有列名。如果我用P或PAK搜索它會顯示結果但是如果我用'我住在巴基斯坦'搜索它,它不會比較。
我明白的事情是它與子字符串相匹配。
是否有可能使其反之亦然像我傳遞字符串「我住在巴基斯坦,並與字符相匹配的字段,並得到巴基斯坦的結果。
即時幫助將不勝感激。
,你可以使用來自笨框架等等()函數。
$this->db->like();
該函數使您能夠生成LIKE子句,這對於執行搜索很有用。
注:傳遞給這個函數的所有值都會自動轉義。
簡單的鍵/值方法: $ this-> db-> like('title','match');
// Produces: WHERE title LIKE '%match%'
如果使用多個函數調用,他們將與它們之間被鏈接:
$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');
我想在$國家,你將擁有所有需要的結果。
你可以用逗號代替空格,然後用find_in_set
。假設你的字符串是$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;
}
@MudassirShah如果我的答案有幫助接受它 –
這可能是工作(免責聲明:未測試):
public function searchCountry($value)
{
$sql = "SELECT DISTINCT FROM `countries`";
$value = explode(' ', $value);// use all words from query
$first_match = FALSE;
foreach ($value as $k => $v)
{
if (strlen($v) >= 3)// exclude 1 and 2 letter words if want
{
if (! $first_match)
{
$sql .= " WHERE `name` LIKE %$v%";
}
else
{
$sql .= " OR `name` LIKE %$v%";
}
}
}
$sql .= " LIMIT 50";
$query = $this->db->query($sql);
$result = $query->result_array();
return $result;
}
但你也許應該使用@Mureinik解。
您可以使用正則表達式技巧爲了這個目的:
where country regexp replace($str, ' ', '|')
此構建表達:
where country regexp 'I|live|in|Pakistan'
這是因爲對正則表達式規則的計算結果爲True。
示例數據,所需結果和您嘗試的查詢將闡明您正在嘗試執行的操作。 –
我使用SELECT * FROM表WHERE country like'%Pak%' 它給了我正確的結果,並顯示所有行有國家巴基斯坦 但我希望它搜索,而我與'我愛巴基斯坦'相比,因爲這句子還包含巴基斯坦 –