Сортировка по свойству datatimes игнорируя год.Как?

#
Сортировка по свойству datatimes игнорируя год.Как?
Ниже привожу код, кт. у меня выводит дни рождения на текущий месяц. Мне надо отсортировать их по порядку, но вот беда -- для правильной сортировки под допсвойству типа datatime мешает год! В обычном SQL запросе это решается запросом  SELECT property_id,date_format(value, '%e/%m' FROM property_value_datetimes ORDER BY value

А как его реализовать? Не смог разобраться. Прошу помощи Не смог, сдаюсь!


<?php
$lst_d = date("-m-");   
// Birthdays

$bdaysInformationsystem_Controller_Show = new Informationsystem_Controller_Show(
            Core_Entity::factory('Informationsystem', 15)
         );
         $bdaysInformationsystem_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('staffISlist')
            )
        ->itemsProperties(TRUE)
        ->groupsProperties(TRUE)
            ->groupsMode('none')
            ->itemsForbiddenTags(array('text'))
            ->group(FALSE)
            ->limit(1000)
            // ->show()
            ;
            // Объединение с нужной таблицей свойств
        $bdaysInformationsystem_Controller_Show
         ->informationsystemItems()
         ->queryBuilder()
         ->leftJoin('informationsystem_item_properties', 'informationsystem_items.informationsystem_id', '=', 'informationsystem_item_properties.informationsystem_id')
         ->leftJoin('property_value_datetimes', 'informationsystem_items.id', '=', 'property_value_datetimes.entity_id',
            array(
               array('AND' => array('informationsystem_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_datetimes`.`property_id`') )   )
            )
         )
            
         // Идентификатор дополнительного свойства
         ->where('informationsystem_item_properties.property_id', '=', 61)
         // Значание дополнительного свойства
             ->where('property_value_datetimes.value', 'LIKE', '%'.$lst_d.'%')
         ->groupBy('informationsystem_items.id')
              // Количество свойств
         ->having(Core_Querybuilder::expression('COUNT(DISTINCT `informationsystem_item_properties`.`property_id`)'), '=', 1)
   ->clearOrderBy()
   ->orderBy('property_value_datetimes.value', 'DESC')
         ;

         $bdaysInformationsystem_Controller_Show->show();



?>
#
Re: Сортировка по свойству datatimes игнорируя год.Как?
Точнее наверное такой запрос:

SELECT informationsystem_items.id,informationsystem_items.name,property_value_datetimes.value FROM informationsystem_items
   INNER JOIN property_value_datetimes ON informationsystem_items.id=property_value_datetimes.entity_id
   WHERE informationsystem_items.informationsystem_id=15
   AND DATE_FORMAT(property_value_datetimes.value, '%e/%m') LIKE '16/04'
   ORDER BY value;   
#
Re: Сортировка по свойству datatimes игнорируя год.Как?
UncleShnyuk, вам помогут SQL-функции DAY() и MONTH(), которые принимают на вход значение поля в формате sql date или sql datetime
В запросе на сортировку это будет выглядеть как
ORDER BY MONTH(property_value_datetimes.value) ASC, DAY(property_value_datetimes.value) ASC

а в запросе на выборку, например для сегодняшней даты 8 апреля как
WHERE MONTH(property_value_datetimes.value) = 4 AND DAY(property_value_datetimes.value) = 8


В коде ТДС и модулей такие выражения лучше записывать через метод Expression:
->where(Core_QueryBuilder::expression('MONTH(property_value_datetimes.value)=' . date('n')))



Ну и полезная дока на всякий случай - https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Заказов не беру. Консультирую редко.
#
Re: Сортировка по свойству datatimes игнорируя год.Как?
2 Kotoff -- спасибо! В итоге я написал так:
// Birthdays

$bdaysInformationsystem_Controller_Show = new Informationsystem_Controller_Show(
            Core_Entity::factory('Informationsystem', 15)
         );
         $bdaysInformationsystem_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('staffISlist')
            )
        ->itemsProperties(TRUE)
        ->groupsProperties(TRUE)
            ->groupsMode('none')
            ->itemsForbiddenTags(array('text'))
            ->group(FALSE)
            ->limit(1000)
            // ->show()
            ;
            // Объединение с нужной таблицей свойств
        $bdaysInformationsystem_Controller_Show
         ->informationsystemItems()
         ->queryBuilder()

         ->leftJoin('informationsystem_item_properties', 'informationsystem_items.informationsystem_id', '=', 'informationsystem_item_properties.informationsystem_id')
         ->leftJoin('property_value_datetimes', 'informationsystem_items.id', '=', 'property_value_datetimes.entity_id',
            array(
               array('AND' => array('informationsystem_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_datetimes`.`property_id`') )   )
            )
         )
     ->where('property_value_datetimes.value', 'LIKE', '%'.$lst_d.'%')
         ->groupBy('informationsystem_items.id')
              // Количество свойств
   ->clearOrderBy()
       ->orderBy(Core_QueryBuilder::expression('DAY(property_value_datetimes.value)'), 'ASC')
         ;

         $bdaysInformationsystem_Controller_Show->show();

#
Re: Сортировка по свойству datatimes игнорируя год.Как?
UncleShnyuk, вариант, но зачем вы накладываете условие через like %...%? Это же довольно дорогая операция, и мне кажется, что через функции работы с датами было бы быстрее.
Заказов не беру. Консультирую редко.
Авторизация