Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Как сделать SQL для даты из From xfields где дата в поле больше текущей?

Как сделать SQL для даты из From xfields где дата в поле больше текущей?


     13.09.2016    Все вопросы » MySQL    2118

вопрос
Здраствуйте. Есть запрос который работает с текущей датой.
Например мы в дополнительное поле datetest задали 14/09/2016

потом задали
$datetime = date('d/m/Y'); 


и считываем все новости где даты равны данным запросом :
$sql = $db->query("SELECT title, id, alt_name FROM dle_post WHERE xfields like '%datetest|{$datetime}%' ");


но есть задача: что мне нужно стянуть новости например еще и на завтра. Помогите с запросом.


поле Xfields выглядит вот так :

team1|other/Brugge_FC_logo_small.png||team2|eng/leicester.png||time|21:45 мск||game_type|league/ChampionsLeague.png||teamname1|Брюгге||teamname2|Лестер||datetest|14/09/2016




Буду благодарен помощи!

Ответил: sashanet


Отвечаю сам на свой вопрос :


вообщем (у меня по русскому языку двойка, я не знаю, что в русском языке не существует слова вообщем) поколдовал и разобрался Сам с вопросом. Но кому интересно выкладываю :

$datatime3 = strtotime("+1 day");
$datatime4 = date('d/m/Y', $datatime3);
$sql = $db->query("SELECT title, id, alt_name
FROM dle_post
WHERE STR_TO_DATE(SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  'datetest|', -1 ) ,  '||', 1 ), '%d/%m/%Y') BETWEEN STR_TO_DATE('{$datatime4}', '%d/%m/%Y')
  AND STR_TO_DATE('31/12/2017', '%d/%m/%Y') ORDER BY datetest");



Строго не судите. Но поспавленная задача работает)

9 комментариев

lutskboy
Эксперт

lutskboy - 14 сентября 2016 10:35 -

по идее лучше всего делать отдельное поле типа date
но можно и через доп поля.

читайте про SUBSTRING_INDEX. и дату тогда придется перевести в timestamp

sashanet
Юзер

sashanet - 14 сентября 2016 13:33 -

Ваш ответ мне совсем ничем не помог!

lutskboy
Эксперт

lutskboy - 14 сентября 2016 13:36 -

к сожалению вам не всегда тут помогут. ждите пока кто то напишет все готовое для вас. и если пройдет время а такое не случиться то для этого есть стол заказов

nowheremany
Эксперт

nowheremany - 14 сентября 2016 15:15 -

Обновите двиг до последней версии - там есть отдельная таблица для хранения значений доп полей - их используйте для фильтрации

Благодарность принимаю тут Связь

sashanet
Юзер

sashanet - 14 сентября 2016 19:26 -

Версия DataLife Engine: 11.1
Тип лицензии скрипта: Лицензия активирована


недавно обновил систему!

nowheremany
Эксперт

nowheremany - 14 сентября 2016 21:54 -

Молодец собственно. Используй dle_xfsearch для фильтрации.

SELECT title, id, alt_name FROM dle_post WHERE id in (select news_id from dle_xfsearch WHERE tagname = 'datetest' and tagvalue in ('{$datetime}','{$datetime2}'))

Благодарность принимаю тут Связь

sashanet
Юзер

sashanet - 14 сентября 2016 23:42 -

Супер. Спасибо Частично вопрос помогли. Но задача не '{$datetime}','{$datetime2}' а нужно где даты больше сегодняшней {$datetime}

nowheremany
Эксперт

nowheremany - 15 сентября 2016 11:26 -

Вроде бы формат даты должен быть таким YYYY-MM-DD, что бы обойтись без преобразованиея, а так используйте этот запрос

$datetime = date('Y-m-d');

SELECT title, id, alt_name FROM dle_post WHERE id in (select news_id from dle_xfsearch WHERE tagname = 'datetest' and '{$datetime}' >= STR_TO_DATE(`tagvalue`, '%d/%m/%Y)
')

Благодарность принимаю тут Связь

sashanet
Юзер

sashanet - 15 сентября 2016 12:56 -

Итак поколдовал и разобрался Сам с вопросом. Но кому интересно выкладываю :

$datatime3 = strtotime("+1 day");
$datatime4 = date('d/m/Y', $datatime3);
$sql = $db->query("SELECT title, id, alt_name
FROM dle_post
WHERE STR_TO_DATE(SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  'datetest|', -1 ) ,  '||', 1 ), '%d/%m/%Y') BETWEEN STR_TO_DATE('{$datatime4}', '%d/%m/%Y')
  AND STR_TO_DATE('31/12/2017', '%d/%m/%Y') ORDER BY datetest");



Строго не судите. Но поставленная задача работает)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх