【问题标题】:MySQL: Order by Count(*)?MySQL:按计数排序(*)?
【发布时间】:2013-08-28 02:46:59
【问题描述】:

我有一个具有以下结构的表格(有些人可能会认为它是标准 vBulletin 安装的一部分):

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(*) 不会那样做。

【问题讨论】:

    标签: mysql sql database vbulletin sql-order-by


    【解决方案1】:

    我认为你可以通过 group 和 count 来解决这个问题。

    SELECT count(script) 出现次数,脚本 从管理日志 GROUP BY 脚本 ORDER BY 出现次数 DESC;

    这里有一个测试链接

    http://sqlfiddle.com/#!2/b6f78/8

    【讨论】:

      【解决方案2】:

      ORDER BY COUNT(*) 应该可以工作,但要去掉 DISTINCT。

      试试:

      "SELECT script FROM adminlog WHERE userid = " . intval($userid)
      . "GROUP BY script ORDER BY COUNT(*)"
      

      【讨论】:

        猜你喜欢
        • 2016-01-08
        • 2012-02-07
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        • 2018-10-18
        • 2012-09-17
        • 2010-12-12
        • 2015-01-14
        相关资源
        最近更新 更多