作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 hasAndBelongsToMany 表关系时如何按用户受欢迎程度进行排序?即:
我有一个名为 playgroups、players 和 playgroup_players 的表。
如何按游戏组中的玩家数量对游戏组进行排序?
游戏小组:
CREATE TABLE `playgroups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`tag` varchar(4) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`avatar_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`state` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
玩家:
CREATE TABLE `players` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(30) DEFAULT NULL,
`last_name` varchar(30) DEFAULT NULL,
`username` varchar(30) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`public_email` tinyint(1) NOT NULL DEFAULT '0',
`facebook_id` varchar(250) DEFAULT NULL,
`card_tooltip` tinyint(1) NOT NULL DEFAULT '1',
`profile_pic_url` varchar(255) NOT NULL,
`public_name` tinyint(1) NOT NULL DEFAULT '0',
`city` varchar(40) NOT NULL,
`state` varchar(2) NOT NULL,
`date_joined` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=107 DEFAULT CHARSET=latin1;
和 PlaygroupPlayers:
CREATE TABLE `playgroup_players` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`player_id` int(11) NOT NULL,
`playgroup_id` int(11) NOT NULL,
`admin` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
最佳答案
SELECT PP.playgroup_id, COUNT(*) cnt
FROM playgroup_players PP
GROUP BY PP.playgroup_id
ORDER BY COUNT(*) DESC
这将为您提供一个游戏组列表,其中至少有一名玩家,按玩家数量排序。当然,字段名称是组成的:)
SELECT G.playgroup_id, COUNT(PP.playgroup_id) cnt
FROM playgroup G
LEFT OUTER JOIN playgroup_players PP ON (PP.playgroup_id=G.playgroup_id)
GROUP BY G.playgroup_id
ORDER BY COUNT(*) DESC
这应该为您提供所有游戏组的列表(即使是没有玩家的游戏组)。我已经在 Oracle 和我自己的一些数据上对此进行了测试,它有效
关于mysql - SQL 按受欢迎程度排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763635/
我是一名优秀的程序员,十分优秀!