簡體   English   中英

搜索多個類別 (FIND_IN_SET)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM