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

Comma separated list in database table, alternative?

我有一个数据库 table,其中包含 'Places to visit' 搜索中使用的城镇。

town/city 字段以逗号分隔。当人们搜索布拉德福德等地点时,这会导致问题,因为它会带来 Bradford Upon Avon 的结果(它只会带来一个结果,这是它在匹配的 table 中看到的第一条记录)。

更新所有记录的最简单方法是什么,以便我可以创建 SQL 仅搜索整个短语,例如 or 'Bradford' 或 'Bradford upon avon',而不仅仅是一个单词不在列表中。

有些记录只有一个城镇。

我是否应该更新 table 以用横线替换逗号和 space?

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

例如,您可以创建一个 "CitiesVisited" table,其中包含指向用户记录的外键列。您可以将多个城市外键绑定到同一用户。

一个用户table:

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

一个城市去过table:

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

我想你的标准是这样的:PlaceColumn Like LookFor & "*"。试试这个:PlaceColumn = LookFor OR Placecolumn Like LookFor & ", *",你不需要改变你的数据。

最好的方法是将您的字段分成不同的列,以避免出现逗号分隔问题。任何其他方法都会让您头疼不已,而且工作多于利润。任何其他查询都会更容易,性能也会更好。此外,结构将与数据库假定的语义保持一致。

有多种方法可以将 xls 或 csv 文件导入您的基地。不管是phpMyAdmin, HeidiSQL, MySQL Workbench, ...过程都非常简单。只有当您打算导入特定字段(例如日期)时,您才需要小心。确保您的数据格式与目标字段类型一一致。如果您的来源有特殊字符 [因为我是西班牙人 ;) 这有时是我的情况],也许您可​​能想先转换为纯文本,然后再将生成的 .txt(例如)文件转换为 utf8,然后再继续导入。

希望能帮到你。