Небольшая подборка довольно интересных запросов на 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",",",".")
ЗЫ: продолжение следует...
Великолепно. Стока полезного материала. Тока обновляйтесь больше