powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка только уникальных месяцев
4 сообщений из 4, страница 1 из 1
Выборка только уникальных месяцев
    #39554617
Gentianviolett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем такую табличку
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE `events_stat` (
	`id` int(11) NOT NULL auto_increment,
	`cod` varchar(8) NOT NULL default '',
	`n_evt` int(4) unsigned NOT NULL default '0',
	`date_evt` date NOT NULL default '0000-00-00',
	PRIMARY KEY (`id`),
	KEY `date_evt` (`date_evt`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;


там еще до черта полей, но для данной задачи это неважно.

Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
(..., 'cod', 'n_evt', 'date_evt', ...)
(...,	'A3',	1,	2015-10-03,	...),
(...,	'X14',	22,	2015-10-14,	...),
(...,	'DM1',	0,	2016-02-03,	...),
(...,	'A3',	15,	2017-05-01,	...),
(...,	'DM3',	7,	2017-05-16,	...),
(...,	'A3',	99,	2017-11-06,	...),


В поле "date_evt" даты для события.
На один день может быть много событий с одинаковыми и/или разными кодами 'cod', а может и не быть вовсе.
Сейчас в таблице около 5000 записей и их к-во постоянно увеличиваются.

Требуется получить массив месяцев по колонке `date_evt`, в которые количество событий 'n_evt' с любым кодом 'cod' было отлично от нуля. Например:
Код: php
1.
2.
3.
4.
5.
$arr = Array(
	2015-10-03,
	2017-05-01,
	2017-11-06,
);


т.к. на дату 2016-02-03 было ноль событий, она в массив не попала. В октябре 2015 г. и мае 2017 г. было несколько событий, поэтому дубликаты тут тоже не нужны.

Сейчас написал так на PHP:
Код: php
1.
2.
3.
4.
5.
6.
7.
$arr = array();
if ($q = mysql_query("SELECT * FROM `events_stat` WHERE `n_evt` > 0 ORDER BY `date_evt` ASC", $dblink) ) {
	while ($r = mysql_fetch_assoc($q)) {
		list($y, $m, $d) = explode('-', $r['date_evt']);
		$arr[$y.'-'.$m] = true;
	}
}



Работает, но долго т.к. PHP перебирает все найденные записи.

Можно ли ускорить работу за счет SQL-запроса, сразу делая выборку только уникальных месяцев?

Заранее благодарю!
...
Рейтинг: 0 / 0
Выборка только уникальных месяцев
    #39554691
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gentianviolett Можно ли ускорить работу за счет SQL-запроса, сразу делая выборку только уникальных месяцев? Да. Но Вы выбираете не месяц, а конкретную дату, пусть и одну за месяц... по какому критерию? почему взято 2015-10-03 и выброшено 2015-10-14?
...
Рейтинг: 0 / 0
Выборка только уникальных месяцев
    #39554694
Gentianviolett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Потому, что дата не важна, нужен только месяц, в котором были значимые события, количество которых отражено в столбце n_evt.
...
Рейтинг: 0 / 0
Выборка только уникальных месяцев
    #39554713
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если пофиг, то, например

Код: sql
1.
2.
3.
4.
SELECT MAX(date_evt)
FROM events_stat
WHERE n_evt>0
GROUP BY DATE_FORMAT(date_evt, '%Y%m')



Или, с учётом того, что ты потом делаешь в ПХП, сразу

Код: sql
1.
2.
3.
SELECT DISTINCT DATE_FORMAT(date_evt, '%Y-%m')
FROM events_stat
WHERE n_evt>0
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка только уникальных месяцев
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]