Морфологический поиск

Точный поиск, реализуемый в базах данных это очень хорошо, когда дело касается точных фраз. Но что делать, когда надо найти нечёткое соответствие — когда среди документов есть Киевская карта но нету Карты Киева? Надо окунаться в текст и язык. Любое сообщение на естественном языке можно рассматривать по глубине и этим занимаются разные разделы […]

Полнотекстовый межтабличный поиск для InnoDB

Предлагаю решить интересную SQL-задачу. Думаю у среднего девелопера она займёт пол часа или больше (я же сразу спросил у SQL-гуру). Возникла интересная задача при переходе с MyIsam на InnoDB. Как известно, полнотекстовый поиск у последнего движка отсутсвует, поэтому было два решения — делать обычное зеркало на MyIsam где был бы […]

Возраст и день рождения через SELECT

Иногда хочется быстро вычислить сколько дней до дня рождения пользователя. Вы все видели это в Одноклассниках и ЖЖ. Это можно делать в запросе например таким образом для mysql 5 SELECT TIMESTAMPDIFF(YEAR,users.birth_date,NOW()) years_old, TIMESTAMPDIFF(DAY, NOW(), DATE_ADD(users.birth_date, INTERVAL 1+TIMESTAMPDIFF(YEAR,users.birth_date,NOW()) YEAR)) next_birth_days FROM users Нашёл в своём стареньком коде, может кому полезно будет..

Mysql rownum

Есть таблица меню в БД с полем порядка order_id, но порядок неправильный и надо порядок обновить по алфавиту другого поля title. Сортировка по полю title исключается, потому что таблица представляет из себя иерархическое меню, где порядок может менять пользователь устанавливая order_id. Использовать отдельно серверную обработку (php) тоже невыгодно — лишнее разделение […]

Mysql prepared statements

Подготовленные запросы имеются в MySQL начиная с 4.1 и нужны по трём причинам. Скорость. Если вы выполняете однообразные запросы, то mysql парсеру каждый раз приходится выполнять распознавание — какой тип запроса, какие данные передаются и тому подобное. Если сделать прототип запроса, а в последствии передавать только данные, то ясное дело […]

Random order в Postgre

Как-то я писал о том как быстро можно сделать выборку в MySQL по большой таблице в случайном порядке не используя ORDER BY RAND(), теперь этот же вопрос всплыл на Postgre. Если вы не знаете, то ORDER BY RAND достаточно медленная операция из-за того, что сортируется фактически вся таблица. Некоторые советовали всё-таки обычную сортировку или […]

Случайная сортировка

Mysql позволяет сортировать случайным образом SELECT * FROM my_table ORDER BY RAND() Проблема в том, что такая сортировка зачастую вовсе не нужна для всей выборки — хочется просто достать случайный элемент из определённого множества, к тому же ORDER BY RAND() достаточно медленный выход из ситуации.

Mysql import/export

Экспорт БД через shell mysqldump -uroot -ppass base > dump.sql Импортировать данные из sql файла в mysql как известно можно несколькими путями. Первый вариант — закачать файл и через консоль обратится напрямую к демону для импортаmysql -uroot -ppass base < dump.sql

Замена данных одного ряда таблиц Mysql

В MySQL есть два расширения, которые позволяют атомарно вставить или обновить запись. Годятся они для штук с довольно высокой нагрузкой, когда без блокировок не работает типичный сценарий: Выбрать запись. Если выбралась — обновить. Если пусто — вставить.

Агрегирование выборки в MongoDB + PHP

MongoDB — очередное веяние моды в веб-разработке, когда хранение данных заранее планируется таким огромным, что необходимо их распределение на несколько серверов с помощью шардирования. Поизучаем же непростой синтаксис агрегирования данных в mongo + php