выбока за текущий месяц

Денч

Новичок
выбока за текущий месяц

Простите что туплю дико...
в базе дата в виде DATE_TIME - "2008-03-12 11:03:18"
надо вытащить все записи за текущий месяц.
делаю:

PHP:
$current_date = mktime(0,0,0,$month,0,$year ); 
// dump($current_date) = 1206903600; 200803
...WHERE UNIX_TIMESTAMP(DATE_FORMAT(`AcctStopTime`,'%Y%m')) = '".$current_date."'
не работает...

Делая проверку Select UNIX_TIMESTAMP(DATE_FORMAT(`AcctStopTime`,'%Y%m')) FROM ...
получаю значение "1596394800", что соответствует дате 202008.

помогите пожалуйста похмельному программисту :confused:
 

Денч

Новичок
блин... Простите, неверно сформулировал задачу:) Не за текущий месяц, а за "произвольный месяц". Только за январь, или там, за ноябрь 2007 года. Зависит от выбранного месяца в приложении.
 

berkut

Новичок
UNIX_TIMESTAMP(DATE_FORMAT(`AcctStopTime`,'%Y%m')) = ''
это выберет только дату секунду в сукунду с указаной.
WHERE DATE_FORMAT(`AcctStopTime`,'%Y%m') = '200801'
наверное так
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
LEFT работает быстрее.
 

berkut

Новичок
Mr_Max
ты замерял, что строковая функция работает быстрее??? можно цифры?
быстрее работает date >= '20080301' AND date < '20080401'
 

Gas

может по одной?
помогите пожалуйста похмельному программисту
мне кажется что похмельный програмист не только ТС :)
почему для работы с датой используются строковые функции, которые игнорируют индекс да и вообще делают какие-то преобразования?
Вон nirex дал ответ.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Gas
Тупанул, что поле нормального временного формата.
 

Денч

Новичок
я по прежнему не могу понять, почему
PHP:
Select UNIX_TIMESTAMP(DATE_FORMAT(`AcctStopTime`,'%Y%m')) FROM `radacct` WHERE `UserName` = 'ikInne4' limit 1
Выдает в unixtimestamp "1596394800", в обычном виде 202008, то есть 2020 год, 08 месяц. при чем в поле `AcctStopTime` (datetime) лежит "2008-03-12 14:50:52"...
Я конечно могу до завтра потерпеть ;) Но тут явно что-то не так...
 

Gas

может по одной?
Денч
посмотри какой тип принимает UNIX_TIMESTAMP и какой тип возвращает DATE_FORMAT - естественно ерунда получается.
И всё равно ты делаешь неправильно.
 

Денч

Новичок
Gas
ей что, обязательно полностью строку типа YYYMMDD передавать? То, что я даю YYYMM не считается?:(

UNIX_TIMESTAMP(date) - Аргумент date может представлять собой строку типа DATE, строку DATETIME, величину типа TIMESTAMP или число в формате YYMMDD или YYYYMMDD местного времени

-~{}~ 31.03.08 15:47:

не, ну я уж сделал просты выбором между датами по рецепту nirex... но этот вопрос заинтересовал, что тут неверно...
 

MaxiStyle

Новичок
Это за последний месяц:
SELECT * FROM tab WHERE date+INTERVAL 1 MONTH<NOW()


Это за текущий:
$current_date = mktime(0,0,0,$month,0,$year );
$current_date=date('Y-m')."-01 00:00:00";

"SELECT * FROM tab WHERE date>='".$start_date." '"
 

Gas

может по одной?
MaxiStyle
первый запрос "не правильный", вернее он выполнится и даже вернёт нужный результат, но "не правильный". Догадаешься почему?
 

zerkms

TDD infected
Команда форума
MaxiStyle
нет, не лучше
этот запрос вообще работать не будет :))))))
 

MaxiStyle

Новичок
Тогда скажите как по-вашему...
Мне не понятны недостатки того запроса...
Или может так:
SELECT * FROM tab WHERE date>NOW()-INTERVAL 1 MONTH
 
Сверху