我有一个具有以下结构的表格(有些人可能会认为它是标准 vBulletin 3 安装的一部分):
mysql> SHOW CREATE TABLE adminlog\G
*************************** 1. row ***************************
Table: adminlog
Create Table: CREATE TABLE `adminlog` (
`adminlogid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userid` int(10) unsigned NOT NULL DEFAULT '0',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
`script` varchar(50) NOT NULL DEFAULT '',
`action` varchar(20) NOT NULL DEFAULT '',
`extrainfo` varchar(200) NOT NULL DEFAULT '',
`ipaddress` varchar(15) NOT NULL DEFAULT '',
PRIMARY KEY (`adminlogid`),
KEY `script_action` (`script`,`action`)
) ENGINE=MyISAM AUTO_INCREMENT=698189 DEFAULT CHARSET=latin1
1 row in set (0.02 sec)
mysql>
以下 PHP 查询将选择特定用户使用的不同脚本:
"SELECT DISTINCT script FROM adminlog WHERE userid = " . intval($userid)
如何获取按出现次数(针对该特定用户 ID)降序排列脚本的查询?
ORDER BY COUNT(*)
不这样做。
我认为你可以通过分组和计数来解决这个问题。
选择计数(脚本)发生次数,脚本 来自管理日志 GROUP BY 脚本 ORDER BY 出现次数 DESC;
这里有一个测试链接
ORDER BY COUNT(*) 应该可以工作,但要去掉 DISTINCT。
尝试:
"SELECT script FROM adminlog WHERE userid = " . intval($userid)
. "GROUP BY script ORDER BY COUNT(*)"