[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка уникальных записей
Letnab
Доброго времени суток. Пишу скрипт и столкнулся с проблемой.
Надо вытащить из базы месяцы. но всё это хранится в unixtime. Как это организовать?

sysinfo_date
1409206173
1409206184
1409226935
1421147730
1421908827
1421928338
1422617385
1422619973
1422622170

icedfox
вот пример простого вывода даты из юних формата
$timestamp=1409206173;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);


Если правильно понял, то с базы вы вытащить можете, нужно сделать вывод месяцев ? если так , вот варианты
$timestamp=1409206173;
echo gmdate("m", $timestamp); // m - месяц; т.е. от "01" до "12"
echo gmdate("M", $timestamp); // M - месяц, буквенный, 3 буквы; например, "Jan"
vagrand
Letnab
Цитата
Надо вытащить из базы месяцы


Напишите подробнее, а то не понятно.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
netruxa
ну например так
$month=9;
$from=mktime(0,0,0,$month,1,2015);
$to=mktime(0,0,0,$month+1,1,2015);
$query="select * from table where sysinfo_date>".$from." and sysinfo_date<".$to;


_____________
ввв.парсер.рф - онлайн система проверки позиций Вашего сайта в поисковиках. Для форумчан 100 рублей на счет.
Letnab
Цитата (icedfox @ 11.09.2015 - 08:06)
вот пример простого вывода даты из юних формата
$timestamp=1409206173;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);


Если правильно понял, то с базы вы вытащить можете, нужно сделать вывод месяцев ? если так , вот варианты
$timestamp=1409206173;
echo gmdate("m", $timestamp); // m - месяц; т.е. от "01" до "12"
echo gmdate("M", $timestamp); // M - месяц, буквенный, 3 буквы; например, "Jan"

Спасибо. Именно это мне и нужно!
Letnab
Цитата (netruxa @ 11.09.2015 - 08:26)
ну например так
$month=9;
$from=mktime(0,0,0,$month,1,2015);
$to=mktime(0,0,0,$month+1,1,2015);
$query="select * from table where sysinfo_date>".$from." and sysinfo_date<".$to;

Спасибо. Пригодиться!
FatCat
Цитата (Letnab @ 11.09.2015 - 10:30)
Как это организовать?

Если небольшая таблица, можно пробежаться циклом по всем записям и вытянуть месяцы.
Если таблица большая, а выборки по месяцам нужны часто, лучше добавить поле месяцев.

_____________
Бесплатному сыру в дырки не заглядывают...
Letnab
Цитата (FatCat @ 11.09.2015 - 08:51)
Цитата (Letnab @ 11.09.2015 - 10:30)
Как это организовать?

Если небольшая таблица, можно пробежаться циклом по всем записям и вытянуть месяцы.
Если таблица большая, а выборки по месяцам нужны часто, лучше добавить поле месяцев.

Таблица очень большая. Но я уже нашел решение) Так что всем Огромное спасибо
smile.gif
icedfox
FatCat посоветовал верно, загнать поле месяцев в индекс и по нему искать, это позволит вам сберечь ресурсы.
depp
Цитата (icedfox @ 11.09.2015 - 13:22)
FatCat посоветовал верно, загнать поле месяцев в индекс и по нему искать, это позволит вам сберечь ресурсы.

а если в таблице данных больше чем за один год?
icedfox
Один раз пройтись скриптом и добавить для каждой поле лучше, чем все время искать полнотекстовым поиском.
FatCat
Цитата (depp @ 11.09.2015 - 15:23)
если в таблице данных больше чем за один год?

Хранить номер месяца, начиная с января 1970-го (начала отсчета юниксштамп) или использовать 2 поля: год и месяц.

_____________
Бесплатному сыру в дырки не заглядывают...
sergeiss
Может быть, я скажу что-то неправильное и непонятное для апологетов Мускуля wink.gif Но если взять Постгре и использовать партиции, то там очень легко изначально сделать разбивку по годам и месяцам.
Подробнее про партиции я писал на форуме http://phpforum.su/index.php?showtopic=84298

В данном случае, думаю, лучше сделать поле с правильным типом и индекс по году и месяцу. Тогда всё будет "в лёт" искаться.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
FatCat
Цитата (sergeiss @ 11.09.2015 - 20:23)
Тогда всё будет "в лёт" искаться.

Не знаю про постгре, а в майэскуэле есть проблема "холодного старта".
Физически БД - это файлы на жестком диске. Есть файл данных, есть файл индекса. При большой таблице файл индекса тоже может быть достаточно большим, и его время чтения может быть значимым.
Я тестировал на своем ноутбуке; таблица с миллионами записей больше 4 Гб, файл индекса по одному полю 200 Мб. Скорость чтения на моем ноутбуке в районе 20 Мб/сек.
Так вот, независимо от того, какой запрос, первое обращение к этой таблице вызывало задержку ответа около 10 секунд - время, требуемое для чтения файла индекса.
Повторные запросы выполнялись моментально - видимо благодаря кешированию.

_____________
Бесплатному сыру в дырки не заглядывают...
sergeiss
FatCat, в Постгре та же самая хрень имеется, с "холодным стартом". Но в любом случае, если разбить на партиции, то явно будет быстрее работать. Потому что и индексы будут грузиться только для партиции, но не для всей таблицы.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.