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