Обрезаем строку с помощью MySQL | Все что вы хотели знать о хостинге и сайтостроении

Обрезаем строку с помощью MySQL


Рубрика: MySQL

Практически на всех блогах сейчас есть блоки на главной странице где выводятся последние события из жизни сайта — к примеру последние комментарии. Поскольку комментарии могут быть длинными и весь комментарий выводить на главной не эстетично, перед выводом его нужно обрезать до нужных размеров.

В PHP4 есть такая замечательная функция substr:

string substr ( string $string , int $start [, int $length ] )

substr() возвращает подстроку строки string длиной length, начинающегося с start символа по счету.
Вся проблема в том что для кодировки unicode эта фунция работает некорректно.

Эту проблему я решил с помощью mysql. Поскольку данные хранятся в базе, логично было бы делать выборку и возвращать уже обрезанные данные. К тому же это будет значительно производительнее, чем выполнять эту операцию средствами php.

В MySQL есть такая же функция SUBSTR которая прекрасно работает со всеми кодировками. Единственный подводный камень — в MySQL строка начинается не с 0 как в php а с 1. Если вы вторым параметром укажите 0 то в результате получите пустую строку.

SELECT SUBSTR(username, 1, 20) username, SUBSTR(comment, 1, 20) comment FROM comments

Теперь при выводе нужно дать понять пользователю что комментарий обрезан, т.е проставить ‘…’ за обрезанными комментариями.

Для этого используем конструкцию IF из синтаксиса MySQL. Если строка до обрезания не равна строке после обрезания то нужно добавить ‘…’ к этому комментарию с помощью CONCAT. Получим вот такой запрос:

SELECT uniq_id, IF(SUBSTR(username, 1, 20)=username, username, CONCAT(SUBSTR(username, 1, 20), '...')) username, IF(SUBSTR(comment, 1, 20)=comment, comment, CONCAT(SUBSTR(comment, 1, 20), '...')) comment FROM comments

В результате получаем как раз то что нам нужно!

Теги: , ,
Если вам понравилась статья или была полезна, поделитесь ею с друзьями: