Romen
Новичок
Добрый день.
Есть вот такой несложный запрос :
SELECT DISTINCT abonent, COUNT(*) AS cnt,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '1%' AND abonent = a.abonent) AS channel1,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '2%' AND abonent = a.abonent) AS channel2,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '3%' AND abonent = a.abonent) AS channel3,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '4%' AND abonent = a.abonent) AS channel4,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '5%' AND abonent = a.abonent) AS channel5,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '6%' AND abonent = a.abonent) AS channel6,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '7%' AND abonent = a.abonent) AS channel7,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '8%' AND abonent = a.abonent) AS channel8,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '9%' AND abonent = a.abonent) AS channel9,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '10%' AND abonent = a.abonent) AS channel10
FROM tbl1 a WHERE add_date>='2012-06-01' AND add_date<'2012-07-01'
GROUP BY abonent ORDER BY abonent
Этим запросом мы должны получить статистику за месяц, по номерам абонентов и доставлялись ли сообщения до них через определенный канал, либо нет.
Проблема в том что объем данных очень большой и запрос может выполнятся ну очень долго.
Помогите пожалуйста с решением задачи, другого пути кроме запроса пока не вижу, хотя возможно мне может помочь какой-либо PHP-скрипт, либо что-то другое. Буду очень признателен любым решения. Заранее спасибо.
Есть вот такой несложный запрос :
SELECT DISTINCT abonent, COUNT(*) AS cnt,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '1%' AND abonent = a.abonent) AS channel1,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '2%' AND abonent = a.abonent) AS channel2,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '3%' AND abonent = a.abonent) AS channel3,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '4%' AND abonent = a.abonent) AS channel4,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '5%' AND abonent = a.abonent) AS channel5,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '6%' AND abonent = a.abonent) AS channel6,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '7%' AND abonent = a.abonent) AS channel7,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '8%' AND abonent = a.abonent) AS channel8,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '9%' AND abonent = a.abonent) AS channel9,
(SELECT CONCAT(SUM(delivered),'/',SUM(not_delivered)) FROM tbl1 WHERE channel_info LIKE '10%' AND abonent = a.abonent) AS channel10
FROM tbl1 a WHERE add_date>='2012-06-01' AND add_date<'2012-07-01'
GROUP BY abonent ORDER BY abonent
Этим запросом мы должны получить статистику за месяц, по номерам абонентов и доставлялись ли сообщения до них через определенный канал, либо нет.
Проблема в том что объем данных очень большой и запрос может выполнятся ну очень долго.
Помогите пожалуйста с решением задачи, другого пути кроме запроса пока не вижу, хотя возможно мне может помочь какой-либо PHP-скрипт, либо что-то другое. Буду очень признателен любым решения. Заранее спасибо.