MySQL. Использование оператора LIKE в секции ORDER BY

Мало кому известно, что оператор like можно использовать в секции order by, задавая, тем самым, дополнительные условия сортировки. Честно признаться, я был крайне удивлен когда, чисто случайно, попробывав такую конструкцию обнаружил, что она работает и, надо сказать, работает очень не плохо. Позднее я обратился к книге по языку MySQL, к которой постоянно обращаюсь, когда ищу какую-нибудь редко используемую фукцию или конструкцию MySQL. Эта книга у меня всегда вызывает уважение и является авторитетот, поскольку не раз выручала в сложных ситуациях. На мое удивление, конструкции, случайно мною обнаруженной, в этой книге я не нашел, по этому решил, что мало кто о ней знает. Эта причина явилась стимулом в написании данной статьи. Итак, начнем. Секция ORDER BY служит для задания условий сортировки результирующего запроса. Так, если вам нужно отсортировать результаты выборки из какой-нибудь таблицы, скажем по имени, необходимо написать следующее:
ORDER BY `name` [asc|desc]
Если Вы имеете, к примеру таблицу, в которой хранится информация о ваших друзьях (имя, фамилия, телефон, адрес), то, полностью, запрос для выборки отсортированный по полю "имя" будет выглядеть так:
SELECT * FROM TableName ORDER BY `name` - по-возрастанию SELECT * FROM TableName ORDER BY `name` desc- по-убыванию , где TableName - имя таблицы, `name` - имя поля содержащее имена друзей.
Это довольно простые запросы и все кто только начал знакомится с MySQL быстро их усвоят, по-этому, идем дальше! Отсортировать результаты по какому то полю не составляет труда, но что делать, если я имею таблицу товаров и хочу отсортировать результаты выборки по полю "наименование товара" да еще и так, чтобы, например, карандаши шли первыми? В таком случае мне опять поможет оператор ORDER BY но уже в таком виде:
SELECT * FROM TableName ORDER BY `good_name`='карандаши' desc или в таком: SELECT * FROM TableName ORDER BY if(`good_name`='карандаши',1,0) desc , где TableName - имя нашей таблицы, `good_name ` - имя поля содержащее наименования товаров.
Обратите внимание, что в секции ORBER BY условие должно возвратить булевое значение и, если поле `goods`='карандаши' - то условие срабатывает (первый пример). Второй пример делает то же самое за исключением способа написания условия. А теперь нам рукой подать и к рассмотрению оператора LIKE в секции ORDER BY. Не будем останавливаться. Итак, допустим Вам нужно выбрать запросом данные из таблицы товаров таким образом, чтобы результирующий запрос был отсортирован по названию товаров но первыми выводились товары с названием "карандаш", после них должны идти товары в названии которых содержиться слово "карандаш", то есть сюда попадут также товары с названием, например "карандаш твердый" или "карандаш мягкий". Такую выборку можно сделать используя оператор Like в секции ORDER BY.
SELECT * FROM TableName ORDER BY good_name like 'карандаш' desc, good_name like '%карандаш%' desc; , где TableName - имя таблицы, `good_name` - имя поля содержащее наименования товаров.
Как видно из примера я использовал "...good_name like..." два раза. Для чего это было сделано? Правильно! Для того чтобы сначало в результат запроса попали те товары наименование которых полностью совпадает со словом "карандаш", а после них шли товары в наименовании которых слово карандаш лишь встречается. Это видно из вида оператора LIKE в первом случае он обозначен как like 'карандаш', а во втором как like '% карандаш%' - с использованием спецсимвола '%' - который говорит, что перед словом "карандаш" и после него могут следовать любые символы.


Клименко Владимир, специально для RuBlin.org Have fun!

Tags: 

Post new comment

Filtered HTML

  • Адреси сторінок і електронної пошти атоматично перетворюються у посилання.
  • Дозволені теги HTML: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Рядки та параграфи відокремлюються автоматично.

Plain text

  • HTML теґи не відображаються
  • Адреси сторінок і електронної пошти атоматично перетворюються у посилання.
  • Рядки та параграфи відокремлюються автоматично.
By submitting this form, you accept the Mollom privacy policy.
© rublin.org, 2009 - 2012 Буду вдячний за зворотнє посилання, при використанні матеріалів сайту. Powered by Rublin Team.