У меня есть очень простая таблица:MySQL подсчитывать логины и вернуть последнюю Войти
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| time | int(11) | YES | | 0 | |
| username | varchar(120) | NO | MUL | | |
| ip | varchar(40) | NO | MUL | | |
| failed | varchar(40) | NO | MUL | | |
+----------+--------------+------+-----+---------+-------+
Я ищу для запроса несколько конкретных пользователей, и я хочу как подсчет логинов и самый последний вход (если существуют любые логины). Я пробовал различные комбинации «GROUP BY», и ничего не работает.
Мой простой подсчет запросов заключается в следующем:
mysql> SELECT count(*), username FROM logins WHERE username='[email protected]' and failed='0' group by username;
Как я могу получить еще одну строку назад, которая содержит как счетчик и последний вход?
Бонусные баллы, если он превращает метку времени в удобный для пользователя формат.
Редактировать: Первый ответ кажется мне самым ясным, и это сработало хорошо.
Я также пришел с этим, что, кажется, работает и возвращается в примерно столько же времени, но я не уверен, что я делаю там с вложенными SELECT:
SELECT COUNT(*), username (SELECT MAX(time)) FROM logins WHERE username='[email protected]' AND failed='0' GROUP BY username;
И чтобы получить удобочитаемое время:
SELECT COUNT(*), username (SELECT FROM_UNIXTIME(MAX(time))) FROM logins WHERE username='[email protected]' AND failed='0' GROUP BY username;
и эта версия и более правильный ищут запрос в первом ответе займут около ого 27s (таблица имеет около 161m строк).
незначительно связаны: вы кропотливо создать эту таблицу, или вы использовали некоторые VIM/Emacs вуду, чтобы записать его в один миг? – puk
Это всего лишь результат «объяснить логины» в mysql-клиенте. :) – sporker