我的查询有问题。 MySQL的:
------------------------------------
| id | string |
------------------------------------
| 1 | people#-#car#-#music#-#art |
| 2 | music#-#sport#-#cars |
| 3 | photography#-#sport#-#art |
| 4 | car#-#peoples#-#photography |
| 5 | music#-#games#-#sport |
....
------------------------------------
我想找到所有带有(例如)特定字people
现在我做的时候:
SELECT `id` FROM `components`
WHERE
lower(string) LIKE '%$word%'
会找到:
------------------------------------
| id | string |
------------------------------------
| 1 | people#-#car#-#music#-#art |
| 4 | car#-#peoples#-#photography |
....
------------------------------------
但我需要找到一个特定的词。就我而言,(id4)
peoples
不合适。我的解决方案不起作用......
SELECT `id` FROM `components`
WHERE
lower(string) = '$word'
OR
lower(string) LIKE '$word#-#%'
OR
lower(string) LIKE '%#-#$word'
OR
lower(string) LIKE '%#-#$word#-#%'
在这种情况下,我没有任何结果。我究竟做错了什么?好想法? 我征求意见。字符串中的哈希是一个糟糕的解决方案吗?
答案 0 :(得分:1)
您问题的直接答案是:
SELECT `id`
FROM `components`
WHERE concat('#', string, '#') like concat('%#', $word, '#%);
正确的方法是不将事物列表存储为字符串。 SQL有一个很好的存储列表结构 - 它被称为表。你应该有一个像ComponentWords
这样的表,每个组件和单词都有一行。