如何在MySQL中找到具有数字字段的相似行?

时间:2011-12-15 14:45:39

标签: php mysql

我有一个存储歌曲信息的数据库。

信息是:

-100到100之间的歌曲响度,
歌曲的能量介于0和1之间,
歌曲的速度在0到500之间,
歌曲的可舞蹈性在0到1之间

我需要找到两首相似的歌曲。

例如:

一首歌有像

这样的信息 响度:-9.121000000000000
能量:0.439501478057000
节奏:133.929000000000000
舞蹈性:0.686523448220000

如何找到类似这首歌的歌曲。

3 个答案:

答案 0 :(得分:1)

MySQL有一个很好的BETWEEN运算符:

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

所以你可以这样做:

SELECT * FROM songs WHERE loudness BETWEEN -9.121-1 AND -9.121+1;

只需添加您想要的所有条件,然后按照对您重要的列进行排序。

答案 1 :(得分:0)

在这个广泛的问题上有很多可能性。

你可以选择所有具有相同响度或相同的能量或节奏或可跳舞性的歌曲

或者确实是每种的组合。

您可以在值+或 - x%

范围内选择值相似的所有歌曲

您可以将整个表格输出到屏幕并使用tablesorter插件在各个列上排序输出。

答案 2 :(得分:0)

我认为您希望价值/价值更接近您已有的价值...搜索它我发现了这个问题:

Select closest numerical value with MySQL query

我认为你可能会感兴趣。因此,基于那里写的内容,我们可以做类似的事情:

$query = <<<query
(
select   *
from     songs
where    loudness >= $given_loudness
AND
energy >= $given_energy
AND
tempo >= $given_tempo
AND
danceability >= $given_danceability
order by id asc
limit 1
)
union
(
select   *
from     songs
where    loudness >= $given_loudness
AND
energy >= $given_energy
AND
tempo >= $given_tempo
AND
danceability >= $given_danceability
order by id desc
limit 1
)
query;

$res = mysql_query($query);

我认为你在songs

中有一个id