【问题标题】:How to Find Similar Rows with Numeric Fields in MySQL?如何在 MySQL 中查找具有数字字段的相似行?
【发布时间】:2011-12-15 14:45:38
【问题描述】:

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

信息是:

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

我需要找出两首歌的相似度。

例如:

一首歌有这样的信息

响度:-9.121000000000000
能量:0.439501478057000
节奏:133.929000000000000
跳舞能力:0.686523448220000

如何找到与这首歌相似的歌曲。

【问题讨论】:

标签: php mysql


【解决方案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;

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

【讨论】:

    【解决方案2】:

    关于这个广泛问题的多种可能性。

    您可以选择所有具有相同响度或相同能量或节奏或舞蹈能力的歌曲

    或者实际上是两者的组合。

    你可以选择所有值相似的歌曲在+或-x%的范围内

    您可以将整个表格输出到屏幕上,并使用表格排序器插件对各个列的输出进行排序。

    【讨论】:

      【解决方案3】:

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

      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

      【讨论】:

        猜你喜欢
        • 2017-12-20
        • 1970-01-01
        • 2023-03-17
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 2015-07-14
        • 2013-01-24
        相关资源
        最近更新 更多