0
Я хочу получить те же результаты в SQL 2, что и в SQL 1, но почему-то SQL-запрос учитывает только общий объем данных для каждой даты на основе WHERE
.Подсчитайте разные данные из одного SQL-запроса
SQL-1 (отображает нужное количество данных на каждый день)
SELECT DATE(datetime_logged) AS date,
COUNT(data_status) AS status_a
FROM activity
WHERE id_user = '1'
AND DATE(datetime_logged) != CURDATE()
AND data_status = 'online'
GROUP BY DATE(datetime_logged)
ORDER BY DATE(datetime_logged) DESC
LIMIT 40
SQL-2 (отображает неправильное количество данных на каждый день)
SELECT DATE(datetime_logged) AS date,
(SELECT COUNT(data_status)
FROM activity
WHERE id_user = '1'
AND DATE(datetime_logged) != CURDATE()
AND data_status = 'online') AS status_a
FROM activity
GROUP BY DATE(datetime_logged)
ORDER BY DATE(datetime_logged) DESC
LIMIT 40
Таблица
CREATE TABLE IF NOT EXISTS `activity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` int(11) NOT NULL,
`id_channel` varchar(50) NOT NULL,
`id_game` int(11) NOT NULL,
`data_muted_server` tinyint(4) NOT NULL,
`data_muted_self` tinyint(4) NOT NULL,
`data_deafen_server` tinyint(4) NOT NULL,
`data_deafen_self` tinyint(4) NOT NULL,
`data_suppressed` tinyint(4) NOT NULL,
`data_status` varchar(10) NOT NULL,
`data_game` text,
`datetime_logged` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `index_datelog` (`datetime_logged`)
)
Как я могу это сделать?
Ваше решение работал как я хотел, но в SQL запрос замедляет работу сайта ** крайне ** много! От 0-1,5 секунд до легкости более 10 секунд. – Erik
Вероятно, проблема с индексированием в поле даты. К сожалению, я не очень помогаю на mySQL. На мой взгляд, ваш первый запрос был лучшим подходом! Почему бы просто не использовать это? – JiggsJedi
Хорошо. Я использовал свой подход, за исключением того, что добавил «AND DATE (a.datetime_logged) = DATE (sub.datetime_logged)» и исправил, чтобы использовать эту функциональность. – Erik