MySQL查询得到的列值与给定的类似

时间:2014-05-06 13:29:42

标签: mysql

对不起,如果我的问题不清楚,我会尝试解释 我有一个连续的列,例如/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/替换为/

2 个答案:

答案 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)

问题是你以非常非常尴尬的方式存储它。

我猜你必须处理任意数量的值。您有两种选择:

  1. 将多个ID存储在JSON格式的blob对象中。虽然MySQL没有内置JSON函数,但是有一些用户定义的函数可以为您提取值等。 请参阅:http://blog.ulf-wendel.de/2013/mysql-5-7-sql-functions-for-json-udf/ 或者,切换到PostGres

  2. 在表格中添加尽可能多的列,作为您希望拥有的最大ID数。因此,如果/ 1/3/7/2/4/8 /是最长的条目,则表中有6列。这是不好的原因:你会有稀疏的列,这会不必要地减慢你的表。

  3. 我确定你可以编写一些可怕的正则表达式来完成这项任务,但我提醒你在巨大的表格上使用复杂的正则表达式。