用于搜索CSV(或类似数组)的MySQL命令

时间:2009-11-06 19:19:52

标签: sql mysql database csv

我正在尝试编写一个SQL查询,该查询将在列中的CSV(或类似)数组中进行搜索。这是一个例子:

插入属性集 卧室= 1,2,3(或1-3) title =不错的财产 价格= 500

然后我想搜索卧室= 2+的地方。这甚至可能吗?

2 个答案:

答案 0 :(得分:4)

在SQL中处理此问题的正确方法是为多值属性添加另一个表。在单个列中存储多个离散值与关系模型相反。由于它是打算禁止的,因此在SQL语言中几乎不支持它。

在逗号分隔列表中查找给定值的唯一解决方法是使用正则表达式,这些表达式通常很难且很慢。您必须处理边缘情况,例如值可能在字符串的开头或结尾处,也可能不在字符串的旁边,以及逗号旁边。

SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';

当您使用规范化表时,还有其他类型的查询很容易,但使用逗号分隔列表很难。您提供的搜索等于或大于搜索条件的值的示例就是这种情况。还要考虑:

  • 如何从逗号分隔列表中删除一个元素?
  • 如何确保列表按排序顺序?
  • 平均房间数是多少?
  • 如何确保列表中的值甚至是有效条目?例如。是什么阻止我进入“1,2,香蕉”?

如果您不想创建第二个表,那么想出一种用单个值表示数据的方法。


更确切地说,我应该说我建议您使用单个值每列来表示您的数据,而Mike Atlas的解决方案可以实现这一点。

答案 1 :(得分:2)

通常,这不是您应该如何在关系数据库中存储数据。

也许您应该有一个MinBedroomMaxBedroom列。例如:

SELECT * FROM properties WHERE MinBedroom > 1 AND MaxBedroom < 3;