Как сделать склонение числительных функцией mysql (mysql declension function)
UPD: Мне для разового SQL запроса потребовалось получить строки с правильным склонением числительных напрямую из базы данных mysql. Погуглив я не нашел ничего подходящего. Создавать PHP скрипт мне показалось дольше, поэтому было принято решение написать функцию.
Я совсем не рекомендую теперь везде и всегда делать склонение таким образом. В шаблонизаторе LiveStreet есть встроенный механизм declension, рекомендуется пользоваться им.
Прошу воспринимать данный код как пример создания фукции в базе данных MySQL, для тех, кому это интересно. Внимание: использование функций и хранимых процедур может сделать ваш код менее переносимым, менее масштабируемым, более медленным и увеличить нагрузку на СУБД.
Может кому пригодится. Пример использования
Я совсем не рекомендую теперь везде и всегда делать склонение таким образом. В шаблонизаторе LiveStreet есть встроенный механизм declension, рекомендуется пользоваться им.
Прошу воспринимать данный код как пример создания фукции в базе данных MySQL, для тех, кому это интересно. Внимание: использование функций и хранимых процедур может сделать ваш код менее переносимым, менее масштабируемым, более медленным и увеличить нагрузку на СУБД.
delimiter // DROP FUNCTION IF EXISTS declension;// CREATE FUNCTION declension( number INT, textOne VARCHAR(255) CHARACTER SET 'utf8', textTwoFour VARCHAR(255) CHARACTER SET 'utf8', textOverFive VARCHAR(255) CHARACTER SET 'utf8') RETURNS VARCHAR(255) CHARACTER SET 'utf8' DETERMINISTIC BEGIN DECLARE last100 INT; DECLARE last10 INT; set last100 = number % 100; set last10 = number % 10; RETURN if(last100 > 4 AND last100 < 21, textOverFive, if(last10 = 1, textOne, if(last10 > 1 AND last10 < 5, textTwoFour, textOverFive) ) ); END //
Может кому пригодится. Пример использования
select concat(ceil(topic_rating), ' ', declension(ceil(topic_rating), 'голос', 'голоса', 'голосов')) from topic;
3 комментария
считаю что это должно быть исключительно в пхп. к тому же есть готовый в лс модификатор смарти declension.
Кстати, нам нужны толковые разработчики в проект. Я вам стучался в скайп но не получил ответа