对不起,如果我的问题不清楚,我会尝试解释
我有一个连续的列,例如/1/3/5/8/42/239/
,让我说我想找到一个类似的列,其中有相应的" ID"尽可能。
示例:
| My Column |
#1 | /1/3/7/2/4/ |
#2 | /1/5/7/2/4/ |
#3 | /1/3/6/8/4/ |
现在,通过在#1
上运行查询,我想获得行#2
,因为它最相似。有没有办法做到这一点,或者它只是我的幻想?谢谢你的时间。
编辑:
如我所知,我正在扩展我的问题。此列表示来自音乐网站的用户的最喜欢的艺术家。我正在按照MyColumn LIKE '%/ID/%'
进行搜索,并将/ID/
替换为/
答案 0 :(得分:1)
由于你没有提供关于你的数据的真正信息,我必须填补我猜测的空白。
所以你有一个用户表
users table
-----------
id
name
other_stuff
你喜欢存储哪些艺术家是用户的最爱。所以你必须有一个艺术家表
artists table
-------------
id
name
other_stuff
为了与您联系,您可以添加另一个名为收藏夹的表
favorites table
---------------
user_id
artist_id
在该表格中,您可以为用户喜欢的每位艺术家添加记录。
示例数据
users
id | name
1 | tom
2 | john
artists
id | name
1 | michael jackson
2 | madonna
3 | deep purple
favorites
user_id | artist_id
1 | 1
1 | 3
2 | 2
例如,要选择用户tom
的收藏夹
select a.name
from artists a
join favorites f on f.artist_id = a.id
join users u on f.user_id = u.id
where u.name = 'tom'
如果你为你的表添加适当的索引,那么这真的很快!
答案 1 :(得分:-1)
问题是你以非常非常尴尬的方式存储它。
我猜你必须处理任意数量的值。您有两种选择:
将多个ID存储在JSON格式的blob对象中。虽然MySQL没有内置JSON函数,但是有一些用户定义的函数可以为您提取值等。 请参阅:http://blog.ulf-wendel.de/2013/mysql-5-7-sql-functions-for-json-udf/ 或者,切换到PostGres
在表格中添加尽可能多的列,作为您希望拥有的最大ID数。因此,如果/ 1/3/7/2/4/8 /是最长的条目,则表中有6列。这是不好的原因:你会有稀疏的列,这会不必要地减慢你的表。
我确定你可以编写一些可怕的正则表达式来完成这项任务,但我提醒你在巨大的表格上使用复杂的正则表达式。