MYSQL. Золотой фонд запросов.
1. Как найти первый незанятый идентификатор:
SELECT (mytable.id+1) as new_id FROM mytable WHERE (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1
то же, но начиная с 1000:
SELECT (mytable.id+1) as new_id FROM mytable WHERE mytable.id>1000 AND (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1
2. Не помню для чего:
(SELECT * ORDER BY `f1` DESC LIMIT 15) ORDER BY `f2` DESC;
3. Как найти количество подстрок в строке:
SELECT (LENGTH(строка) - LENGTH(REPLACE(строка, подстрока, ''))) / LENGTH(подстрока) FROM ...
4. Пропустить определенные таблицы в mysqldump:
mysqldump -h <host> -u <username> -p <schema> --no-data > db-structure.sql
mysqldump -h <host> -u <username> -p <schema> --no-create-info --ignore-table=schema.table1 --ignore-table=schema.table2 > db-data.sql
5. Как выбрать с LEFT JOIN только одну запись?
Правильный ответ - не использовать LEFT JOIN. Выигрыш во времени на 1-2 порядка.
SELECT u.*, (SELECT video_id FROM video_stats v where u.member_id=v.member_id limit 1) as video_id FROM users u;