2013-08-28 4 views
2

У меня есть таблица со следующей структурой (некоторые из вас могут признать его как часть стандартной установки форума):MySQL: заказ по графу (*)?

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)

Как я могу получить запрос на заказ сценарии по количеству появлений (для этого конкретного идентификатора пользователя), по убыванию? ORDER BY COUNT(*) не делает.

ответ

4

Я думаю, вы могли бы решить эту проблему с группой и сосчитать.

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

здесь у вас есть ссылка для тестирования

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

+0

Спасибо! Это сработало :) –

1

ORDER BY COUNT (*) должен работать, но избавиться от DISTINCT.

Try:

"SELECT script FROM adminlog WHERE userid = " . intval($userid) 
. "GROUP BY script ORDER BY COUNT(*)" 
Смежные вопросы