Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выгрузить количество по 3м полям

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DlTA
Отправлено: 20 Мая, 2016 - 14:30:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




у меня в базе дата записана в 3 поля
d | m | Y
так было кемто придумано, менять не хочу (много чего туба написано)
и вот мне нужно получить количество записей в приделах даты От и До

и вот тут косяки
мои варианты:
1) получить количество за каждый день
SELECT COUNT(tab.id) FROM tab WHERE d=1 AND m=2 AND Y=2016
и таких запросов должно быть столько сколько дней, тормозяво(

2) получать значения предположительно, то есть расчитываю примерные разбросы
SELECT COUNT(tab.id) FROM tab WHERE Y*365+m*31+d>=$dateFrom AND Y*365+m*31+d<=$dateTo
где $dateTo и $dateFrom тоже пересчичываются 2016*365+5*31+20
это не точно, и тоже тормозяво.


Может знаете как получить значения из 3 полей,
типа как pole IN (1, 2, 3)
но только для 3х полей?
 
 Top
3d_killer
Отправлено: 20 Мая, 2016 - 15:07:54
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




может поле добавишь и сделаешь массовый апдейт а потом дергай как хочешь?
(Добавление)
другого варианта не тормозного нет
 
My status
 Top
Viper
Отправлено: 20 Мая, 2016 - 16:09:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




DlTA пишет:
менять не хочу
лучше поменять!


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DlTA
Отправлено: 20 Мая, 2016 - 16:10:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




но вдруг есть вариант выбрать
типа
для поля 1=2016
для 2=2
для 3=3
и
для 1=2016
для 2=2
для 3=4

но строить такую штуку стремно, вдруг не хватит места для запроса

может есть чет типа выбора IN ()
но как того по хитрее?
 
 Top
3d_killer
Отправлено: 20 Мая, 2016 - 16:15:12
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




да нет ничего хитрее это будет долго в любом случае, не хочешь менять делай как задумал
 
My status
 Top
Мелкий Супермодератор
Отправлено: 20 Мая, 2016 - 19:46:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Postgresql? Функциональный индекс по функции make_date.

Mysql?
5.7.6 и выше - generated column и индекс по ней. Да, внезапно в mysql завезли своеобразные функциональные индексы.
Более древние - реальная колонка и пара триггеров для синхронизации.

Делать что-то странное:
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE (Y, m, d) IN ((2016, 2, 3), (2016, 2, 4), ...)


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 20 Мая, 2016 - 20:19:10
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




ты хотишь сказать что это будет быстро?
 
My status
 Top
Мелкий Супермодератор
Отправлено: 20 Мая, 2016 - 20:34:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Функциональный индекс? Однозначно.

IN - по составному индексу по трём полям побежит вполне. Не слишком резко побежит, если значений будет много в IN, помнится, развесистые перечисления в in и в mysql и в postgresql пока ещё проблема. Но уж явно не fullscan, как решение в лоб из первого поста.
(Добавление)
Лучше всего, конечно, смигрировать в нормальный date - не по скорости, а по стоимости дальнейшей поддержки. Но нет так нет. Если смигрировать писателей в обозримое будущее невозможно, то выкинуть старые поля не выйдет всё равно. Зато можно понаписать generated column и внятно читать.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 20 Мая, 2016 - 21:37:01
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Мелкий пишет:
WHERE (Y, m, d) IN ((2016, 2, 3), (2016, 2, 4), ...)

о да, это работает!!!

нынешняя версия MySQL 5.5.47
(Добавление)
Мелкий +
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB