MySQL. Хитрые приемы

Небольшая подборка довольно интересных запросов на MySQL.

Выборка одной случайной записи
Бывает очень полезно при разработке систем ротации банеров, каких-либо лотерей, или просто цитатников типа «Hello, Dolly».
SELECT ... ORDER BY RAND() LIMIT 1

Выбор всех строковых записей, длина которых меньше заданной
SELECT WHERE CHARACTER_LENGTH(mystr) < 10

Транзакции с откатом
Для выполнения запосов с возможностью отката к предыдущему состоянию БД нужно отправить базе данных дополнительные запросы:
mysql_query("BEGIN");
mysql_query("SELECT ..."); // Выполняем свои запросы
mysql_query("COMMIT"); // подтверждаем транзакцию
mysql_query("ROLLBACK"); // откатываемся

Получение даты последнего изменения таблицы БД
SHOW TABLE STATUS FROM db_name LIKE 'table_name'
Время последнего изменения таблицы будет отбражено в ключе «Update_time».

Регулярные выражения в запросах
Оказывается в запросах можно использовать регулярные выражения!
SELECT username FROM users WHERE username REGEXP 'user[0-9*]'
Этот запрос вернет пользователей вида user1, user2, user3, и т.д.

Рейтинг сайтов
Задача: Есть таблица сайтов, содержащая адрес сайта и количество уникальных посетителей на нем.
Нужно одним запросом узнать место сайта в рейтинге только по его адресу.
SELECT COUNT(1) + 1 FROM table_rating WHERE uniques > (SELECT uniques FROM table_rating WHERE site_name='http://2lx.ru')

Получение объема и количества записей в таблицах
SELECT table_name AS table_name, engine, ROUND(data_length/1024/1024,2) AS total_size_mb, table_rows
FROM information_schema.tables WHERE table_schema=DATABASE();

Данные за последние несколько дней
Запрос, возвращающий записи, добавленные за последние несколько дней на примере базы данных WordPress
SELECT * FROM wp_posts WHERE
post_status = 'publish' AND
post_type = 'post' AND
post_password = '' AND
TO_DAYS(NOW()) - TO_DAYS(post_date) <= 30
ORDER BY comment_count DESC
LIMIT 10

Спасибо wmas

Обновить запись, и добавить ее, если такой записи нет
Запрос, изменяющий запись если она есть. А еслии ее нет, то добавляет ее.
INSERT INTO table SET column = 1, id=101 ON DUPLICATE KEY UPDATE column = column + 1

Замена символов в таблице
Может быть полезно, например, если необходимо изменить разделитель целой и дробной части хранимых в БД чисел с запятой на точку.
REPLACE("table_name",",",".")

ЗЫ: продолжение следует...

Поблагодарить автора

One Response to MySQL. Хитрые приемы

  1. Великолепно. Стока полезного материала. Тока обновляйтесь больше :)

Оставить комментарий

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>