【问题标题】:Selecting row based on ID and then again based on cardinality of text box根据 ID 选择行,然后再根据文本框的基数选择行
【发布时间】:2014-06-05 23:06:27
【问题描述】:
我的问题是我需要像这部电影一样对以下数据库进行排名和分组 -> 最常用的文本。
下面的表格记录了与情绪反应相关的 userId、filmId 和文本。我想做的是说电影 52,并获取使用最多和第二多的文本,例如在这种情况下,有 7 个“文本”是唯一的,2 个被使用了两次,“美丽”和“巧妙”,所以我需要为电影 52 获得美丽和巧妙的结果。这如何在 MYSQL 或 Laravel Eloquent 中完成?非常感谢您提供任何信息
【问题讨论】:
标签:
php
mysql
sql
laravel
eloquent
【解决方案1】:
在连接中声明一个变量,并在您的分组查询中增加它,但请确保在内部查询中按顺序排列,否则排名将没有任何值。然后从排名小于或等于所需排名的内部查询中选择。
SELECT FILMID, TEXT
FROM (
SELECT FILMID, TEXT, COUNT(*), @r:=@r+1 AS RANK
FROM filmReview
JOIN (SELECT @r:=0) R
GROUP BY FILMID, TEXT
ORDER BY FILMID, COUNT(*) DESC, TEXT
) T
WHERE RANK <= 2
查看SQLFiddle。