【问题标题】:Find most common data values from MySQL columns?从 MySQL 列中查找最常见的数据值?
【发布时间】:2011-10-27 22:50:18
【问题描述】:

我正在尝试将音乐建议应用程序集成到我当前的音乐评级应用程序中。我正在寻找一种根据当前口味推荐音乐的方法。

我在我的 iPod 上写这个问题,所以格式可能是错误的,所以我将解释这些列。

rate_id, username, artist, type (男/女/混), song_id, songname, genre, year, like, @987654 /p>

例如,一个人喜欢 4 首曲目,这个查询是:

SELECT * FROM rates WHERE username='$_SESSION['username']' LIMIT 4 ORDER BY id

返回:

1   | mrexample | Katy Perry    | F | 55 | Firework     | Pop | 2010 | 1 | 0
78  | mrexample | Lady Gaga     | F | 36 | Pokerface    | Pop | 2010 | 1 | 0
95  | mrexample | Nelly         | F | 96 | Just a Dream | Pop | 2010 | 1 | 0
106 | mrexample | Justin Bieber | M | 78 | Baby         | Pop | 2010 | 1 | 0

好的,从这种评分模式来看,我们知道 mrexample 最喜欢 2010 年写的女性流行歌曲,所以根据这些数据,我们对用户生成的音乐收藏数据库进行查询:

mysql_query("SELECT * FROM music WHERE genre='pop' AND type='F' AND year='2010' LIMIT 5 ORDER BY RAND()")

现在,我的问题是:我如何从有关该人费率的大量数据中找出常见数据是什么?

我认为必须有一个 mysql 命令,但我不确定:/

我考虑过 if 语句,不可能,如果部分流行部分是艺术家,那么可能性太多,我们的数据库中有很多艺术家。切换,同样的事情。数数,没有什么特别值得我数的。我可以再次针对 if 使用 mysql num 行 - 太多了。

有什么想法吗?

【问题讨论】:

  • 您正在查看的是您的应用程序的自定义要求。您需要确定“流行”对您意味着什么,并根据您提到的参数编写算法。

标签: php mysql autosuggest


【解决方案1】:

此查询为您提供用户最喜欢的类型。如果您想计算“类型”等其他参数,您需要为此定义一个公式并相应地更改此查询。

SELECT genre FROM rates
  WHERE username = '$_SESSION["username"]'
  GROUP BY genre
  ORDER BY COUNT(*) DESC
  LIMIT 1  

【讨论】:

  • 谢谢!我忘记了所有关于分组的事情! (php/SQL 新手):)
【解决方案2】:

在微不足道的层面上......

SELECT type, genre, year, (SUM(like)-SUM(dislike))/COUNT(*)
FROM rates
WHERE username='$escaped_username'
GROUP BY type, genre, year
ORDER BY (SUM(like)-SUM(dislike))/COUNT(*) DESC
LIMIT 0,1

但您可能希望考虑到特定年份之间没有太大差异的情况......

SELECT * 
FROM (
SELECT type, genre, year, (SUM(like)-SUM(dislike))/COUNT(*) as pref
FROM rates
WHERE username='$escaped_username'
GROUP BY type, genre, year
UNION
SELECT type, genre, '%', (SUM(like)-SUM(dislike))/COUNT(*) as pref
FROM rates
WHERE username='$escaped_username'
GROUP BY type, genre
) ilv
ORDER BY ilv.pref DESC;

而且因为有 3 个不同的字段 - 您需要为类型/流派/年份的任意组合编写 6 个子查询。

请注意,以上都不会给出与....相同的结果。

SELECT r.type, r.genre, r.year, artist, song_id, song_name
FROM rates r,
(SELECT type as preftype FROM rates t WHERE username='$escaped_username' 
   GROUP BY type ORDER BY (SUM(like)-SUM(dislike))/COUNT(*) DESC
   LIMIT 0,1) as pref_type,
(SELECT genre as prefgenre FROM rates g WHERE username='$escaped_username' 
   GROUP BY genre ORDER BY (SUM(like)-SUM(dislike))/COUNT(*) DESC
   LIMIT 0,1) as pref_genre,
(SELECT year as prefyear FROM rates y WHERE username='$escaped_username' 
   GROUP BY year ORDER BY (SUM(like)-SUM(dislike))/COUNT(*) DESC
   LIMIT 0,1) as pref_year
WHERE r.type=preftype
AND r.genre=prefgenre
AND r.year=prefyear
AND username='$escaped_username'
ORDER BY likes DESC, dislikes ASC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 2012-08-27
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多