works:programmer:db-mysql:simple-ideas

Простые и гениальные идеи

Поиск участников между 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`
works/programmer/db-mysql/simple-ideas.txt · Last modified: 2024/01/11 06:39 by Chugreev Eugene