【发布时间】:2016-08-31 01:48:01
【问题描述】:
假设我有一张表格,其中一列的标题是标签,其中的数据是这样用逗号分隔的。
"tag1,tag2,new york,tag4"
如你所见,有些标签会有空格。
在表格中查询等于“new york”的任何标签的最佳或最准确的方法是什么?
过去我用过:
SELECT id WHERE find_in_set('new york',tags) <> 0
但是 find_in_set 在值有空格时不起作用。
我目前正在使用这个:
SELECT id WHERE concat(',',tags,',') LIKE concat(',%new york%,')
但我不确定这是否是最好的方法。
你会怎么做?
【问题讨论】:
-
第二种方法的问题是如果你有
tag1和tag10这样的标签,如果你搜索tag1,两者都返回true。 -
嗯,是的 - 这肯定是一个问题。
-
没错,不知道如何继续。
-
此时标准化不是一个选项。我没有设计数据库,也不能重新设计。我所能做的就是查询它......
-
明显违反了正确的database normalization 的Zero, One or Infinity Rule。不要这样做。如果你被这个模式卡住了,你就会受到伤害,因为关系数据库真的不喜欢逗号分隔的值。任何查询的性能都会非常缓慢,如果您正在处理大量数据,这可能会融化并破坏您扔给它的任何服务器硬件。