Имеется таблица: actions
id | user_id | type | created_at
В поле type может хранится одно из следующих значений add или remove. Необходимо сделать выборку за определённый интервал (7 дней), с выводом количества add и remove.
Вывод должен быть таким:
2016-09-09 | 10 | 15
2016-09-08 | 23 | 45
Где:
1. Дата
2. Количество записей у которых type = add и created_at равен дате.
3. Количество записей у которых type = remove и created_at равен дате.
Второй вопрос, какой лучше выбрать тип для поля created_at и какие необходимо указать ключи? На всём проекте стоит int(11). Количество записей в таблице может быть 1 000 - 10 000 000.
Сейчас у поля created_at стоит int(11) и составлен такой запрос, который при тысячи записей занимает около 4-5 сек из-за преобразования даты: DATE(FROM_UNIXTIME(`created_at`)) = `data`
SELECT
DATE(FROM_UNIXTIME(`created_at`)) AS `data`,
(
SELECT
COUNT(`id`)
FROM
`actions`
WHERE
`user_id` = 1 AND
`type` = 'add' AND
DATE(FROM_UNIXTIME(`created_at`)) = `data`
) AS `add`,
(
SELECT
COUNT(`id`)
FROM
`actions`
WHERE
`user_id` = 1 AND
`type` = 'remove' AND
DATE(FROM_UNIXTIME(`created_at`)) = `data`
) AS `remove`
FROM
`actions`
WHERE
`created_at` > UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY `data`