簡體   English   中英

Mysql查詢逗號分隔過濾結果

[英]Mysql query comma separated filter result

我的桌子看起來像這樣

id pname     pfilter
1  onename   24, 36, 120
2  another   22, 124, 1
3  yet       120, 12, 124

我正在嘗試運行此查詢:

$filterrun = "24";

SELECT * FROM table WHERE pfilter LIKE '$filterrun'

在這個例子中,我希望只顯示id#1。 而不是id#2和#3,因為它們包含pfilter 124。

如何才能做到這一點?

嘗試使用FIND_IN_SET

  SELECT * FROM table WHERE  FIND_IN_SET('$filterrun', pfilter)

如果你有拼寫,那么你可以使用它

  SELECT * FROM table WHERE  FIND_IN_SET('$filterrun',replace(replace(pfilter, ', ', ','),' ,',','))

編輯:如果你在值之間有空格會很難,你也可以像這樣繞過它們。

    SELECT * FROM table WHERE  
    pfilter LIKE ' $filterrun,%' 
    or pfilter like '$filterrun,%'
    or pfilter like '%,$filterrun,%'
    or pfilter like '%, $filterrun,%'
    or pfilter like '%,$filterrun ,%'
    or pfilter like '%,$filterrun %'
    or pfilter like '%, $filterrun' 

或者使用它

   SELECT * FROM table1 WHERE  FIND_IN_SET('$filterrun',pfilter) 
                            or FIND_IN_SET(' $filterrun',pfilter)
                            or FIND_IN_SET('$filterrun ',pfilter)

請注意: $filterrun之前和之后都有空格。

演示與演出

您的數據包含逗號空間分隔列表。 這為您提供了兩種直接方法:

SELECT *
FROM table 
WHERE concat(', ', $filterrun, ', ') like concat('%, ', pfilter, ', %');

或者echo_me的解決方案略有不同:

SELECT *
FROM table 
WHERE find_in_set($filterrun, replace(pfilter, ', ', ','));

否則,你必須開始處理空格。

但最終,您應該使用單獨的關聯/聯結表。 這將每個id和過濾器值有一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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