我在 Codeigniter 中有專案,用戶可以在其中搜索多個類別。在我的資料庫中,類別欄位是逗號分隔的字串 (46, 53, 76)。
當用戶在過濾器 (46) 中選擇類別并與資料庫中的第一個類別匹配時,它作業正常,但如果用戶選擇另一個類別 (53),查詢將無法正常作業。當用戶選擇多個類別時,也會出現類似的問題。
我的代碼是這樣的:
if(!empty($category)) {
$cat_array = explode(',', $category);
$count_items = count($cat_array);
if($count_items == '1') {
$this->db->where("find_in_set($category, po_category)");
} else {
$this->db->group_start();
$count = 0;
foreach($cat_array as $item) {
$count ;
if($count == '1') {
$this->db->where("find_in_set($item, po_category)");
} else {
$this->db->or_where("find_in_set($item, po_category)");
}
}
$this->db->group_end();
}
}
我想知道 'find_in_set' 在這個結構中是否有效。
uj5u.com熱心網友回復:
在我的資料庫中,類別欄位是逗號分隔的字串 (
'46, 53, 76')。當用戶在過濾器 (
46) 中選擇類別并與資料庫中的第一個類別匹配時,它可以正常作業,但是,如果用戶選擇另一個類別 (53),查詢將無法正常作業。
53您的價值觀串列中沒有!它包含' 53'與要搜索的值不同的值(帶前導空格字符)。因此,您的搜索給出了否定的結果。
SELECT FIND_IN_SET( 53 , '46, 53, 76'),
FIND_IN_SET( '53', '46, 53, 76'),
FIND_IN_SET(' 53', '46, 53, 76');
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=81f440fd21b450924f21e769039ad1db
附注。尾隨空格也被考慮在內。
uj5u.com熱心網友回復:
在您的po_category欄位中逗號后有空格。
所以你需要洗掉它。
你可以這樣試試。
$this->db->where("find_in_set($item, REPLACE(po_category, ' ', ''))");
$this->db->or_where("find_in_set($item, REPLACE(po_category, ' ', ''))");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/370486.html
