2

次の構造のテーブルがあります (標準の 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(*)それはしません。

4

2 に答える 2

4

これは group と count で解決できると思います。

SELECT count(script) ocurrences, script FROM adminlog GROUP BY script ORDER BY ocurrences DESC;

ここにテスト用のリンクがあります

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

于 2013-08-28T03:00:09.760 に答える
1

ORDER BY COUNT(*) は機能するはずですが、DISTINCT は削除してください。

試す:

"SELECT script FROM adminlog WHERE userid = " . intval($userid)
. "GROUP BY script ORDER BY COUNT(*)"
于 2013-08-28T02:58:26.580 に答える