带有哈希的SQL LIKE运算符

时间:2015-05-10 09:59:58

标签: php mysql sql

我的查询有问题。 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#-#%'

在这种情况下,我没有任何结果。我究竟做错了什么?好想法? 我征求意见。字符串中的哈希是一个糟糕的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您问题的直接答案是:

SELECT `id`
FROM `components` 
WHERE concat('#', string, '#') like concat('%#', $word, '#%);

正确的方法是不将事物列表存储为字符串。 SQL有一个很好的存储列表结构 - 它被称为表。你应该有一个像ComponentWords这样的表,每个组件和单词都有一行。