[英]Search multiple categories (FIND_IN_SET)
我在 Codeigniter 有項目,用戶可以在其中搜索多個類別。 在我的數據庫中,類別字段是逗號分隔的字符串(46、53、76)。
當過濾器(46)中的用戶 select 類別並與數據庫中的第一個類別匹配時,它可以正常工作,但是如果用戶 select 另一個類別(53),查詢將無法正常工作。 當用戶 select 多個類別時,也會出現類似的問題。
我的代碼是這樣的:
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”是否適用於這種結構。
在我的數據庫中,類別字段是逗號分隔的字符串(
'46, 53, 76'
)。當過濾器(
46
)中的用戶 select 類別並與數據庫中的第一個類別匹配時,它可以正常工作,但是如果用戶 select 另一個類別(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
PS。 尾隨空格也被考慮在內。
您的po_category
字段中的逗號后有空格。
所以你需要刪除它。
你可以這樣試試。
$this->db->where("find_in_set($item, REPLACE(po_category, ' ', ''))");
$this->db->or_where("find_in_set($item, REPLACE(po_category, ' ', ''))");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.