数据库表中的逗号分隔列表,替代?

时间:2015-05-01 16:49:27

标签: sql comma

我有一个数据库表,其中包含“访问地点”中使用的城镇和城市。搜索范围。

城镇/城市字段以逗号分隔。当人们搜索布拉德福德这样的地方时,这会引起问题,因为它会为Bradford Upon Avon带来结果(它只会产生一个结果,这是它在匹配的表中看到的第一个记录)。

更新所有记录的最简单方法是什么,因此我只能为整个短语创建SQL搜索,例如或者布拉德福德'或者' Bradford on avon',而不只是列表中的一个词。

有些记录中只有一个城镇。

我应该更新表格以用条形替换逗号和空格吗?

3 个答案:

答案 0 :(得分:1)

更新字段以根据需要将其分成单独的行,列或表。将CSV数据存储在关系数据库中通常是一个坏主意 - 数据库可以轻松生成CSV数据(并且可能具有导入CSV数据的一些功能),但除非您将其存储为BLOB(您不是) ,它应该在不同的列中。

例如,您可以创建一个“CitiesVisited”表,该表具有用户记录的外键列。您可以将多个城市外键加入同一个用户。

用户表:

UserID | UserName | OtherUserInfo
----------------------------------
1        Dan        Some info

城市访问表:

CityVisitID | CityName    | UserID
----------------------------------
1             Stratford     1
2             New Haven     1
3             London        2

然后,您可以检查给定用户轻松访问的所有城市,即

SELECT cv.CityName
FROM CityVisited cv
INNER JOIN Users u
ON cv.UserID = u.UserID
WHERE u.UserName = 'Dan'

或者,如果您已经在代码中知道了您的用户ID ...

SELECT cv.CityName
FROM CityVisited cv
WHERE cv.UserID = 1

答案 1 :(得分:1)

最好的方法是将字段划分为单独的列,以避免逗号分隔的问题。对于你而言,任何其他方法都会变成太多令人头疼的问题,而且工作多于利润。任何其他查询将更容易,其性能更好。此外,结构将相应地保留数据库的语义。

有几种方法可以将xls或csv文件导入基础。无论我们是在谈论phpMyAdmin,HeidiSQL,MySQL Workbench,......这个过程都非常简单。如果您打算导入特定字段(如日期),则只需要小心。确保您的数据格式与目标字段类型1一致。如果你的源码有特殊字符[因为我是西班牙人;)这有时是我的情况]也许你可能想要在进行输入之前将结果.txt(例如)文件转换为utf8之前变成纯文本。 / p>

希望能帮到你。

答案 2 :(得分:0)

我想你有这样的标准:PlaceColumn Like LookFor & "*"。请改为尝试:PlaceColumn = LookFor OR Placecolumn Like LookFor & ", *",您无需更改数据。