|
我试图从表格中获取特定用户的类别与问题的类别列中的字符串匹配的所有问题。
我遇到了几个问题:
$string^
无效,因为我尝试与之比较的字符串可能类似于Retail|Field Based
我无法使用WHERE category LIKE "%'.$category.'%"
因为某些类别
分享单词。例如:Retail
和Retail Roadshow
如果Retail
是类别,它也会匹配Retail Roadshow
我对如何使用当前数据库结构执行此操作感到有点失落。我不打算改变数据库的结构,但如果我无法得到目前工作方式的工作答案,我可能不得不这样做。
答案 0 :(得分:2)
您有三种选择:
1)将通配符匹配拆分为单字业务:
foo LIKE '%bar baz%'
- > foo LIKE '%bar%' AND foo LIKE '%baz%'
2)使用全文索引
foo like '%bar baz%'
- > MATCH(foo AGAINST 'bar baz')
3)或规范化您的表,以便每个关键字都是自己的子记录:
JOIN keywords ON ...
WHERE keywords.word IN ('bar', 'baz')
答案 1 :(得分:0)
正如其他人已经提到的,数据库最适合表格。
但是为了争论,让我们看看如何在没有任何数据库重构的情况下实现目标。
首先,您需要用逗号替换所有管道。
replace(column, '|', ',')
现在在结果上使用find_in_set:
find_in_set('Retail', replace(column, '|', ','))
MySQL索引以1开头,因此您可以检查Rrtail是否存在于以下列中:
find_in_set('Retail', replace(column, '|', ',')) > 0