====== Простые и гениальные идеи ======
Поиск участников между 2мя датами по вводному date_from и date_to, оригинальная идея от автора промышленных решений в сфере SQL.
WHERE 1
AND date_from <= :date_to
AND date_to >= :date_from
Простенький Insert or Update очень интересный пример как можно передать значения с Insert'а
INSERT INTO menu_sub (id, name, desc, misc)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
name=VALUES(name),
desc=VALUES(desc),
misc=VALUES(misc)
Немного фишечек от MariaDB
-- Insert без Into
INSERT `table` (`field`) VALUES ("value");
-- join по одноименному столбцу
SELECT u.*, g.name FROM `users` `u`
LEFT JOIN `groups` `g` USING `user_id`
AutoIncrement ручками, скорее всего не супер точный но рабочий точно.
INSERT INTO test1 (`test1`, `test2`)
(SELECT ROUND(mr.test1 + 0.2, 2) as A, ROUND(mr.test1 + 0.3, 2) as B FROM test1 mr
LEFT JOIN (SELECT MAX(test1.test1) AS valmax FROM test1) AS valmaxTable ON mr.test1 = valmaxTable.valmax
WHERE mr.test1 = valmaxTable.valmax);
-- PK test1 test2
-- 1 0,1 0,2
-- 2 0,3 0,4
--- 3 0,5 0,6
Начало/конец Дня, Недели, Месяца
SELECT
CAST(CURDATE() AS datetime) as `DayBegin`,
DATE_SUB(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 SECOND) AS `DayEnd`,
DATE_ADD(CURDATE(), INTERVAL(-WEEKDAY(CURDATE())) DAY) AS `BeginOfWeek`,
DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY) AS `EndOfWeek`,
CAST(DATE_FORMAT(CURDATE() ,'%Y-%m-01') AS DATETIME) AS `BeginOfMonth`,
DATE_SUB(DATE_ADD(CAST(DATE_FORMAT(CURDATE() ,'%Y-%m-01') AS date), INTERVAL 1 MONTH), INTERVAL 1 SECOND) AS `EndOfMonth`