CREATE TABLE test (
id_1 INT,
id_2 INT,
ids VARCHAR(255) AS (CONCAT(LEAST(id_1, id_2), ' ', GREATEST(id_1, id_2))) STORED,
PRIMARY KEY(ids),
CHECK (id_1 <> id_2)
);
CREATE TRIGGER tr_name
BEFORE INSERT
ON articles
FOR EACH ROW
SET NEW.image = CONCAT('catalog/blog-image/', COALESCE((SELECT 1 + MAX(SUBSTRING_INDEX(image, '/', -1)) FROM articles), 1), '.jpg');
CREATE TABLE image_counter (id INT AUTO_INCREMENT PRIMARY KEY);
CREATE TRIGGER tr_name
BEFORE INSERT
ON articles
FOR EACH ROW
BEGIN
INSERT INTO image_counter VALUES (DEFAULT);
SET NEW.image = CONCAT('catalog/blog-image/', LAST_INSERT_ID(), '.jpg');
DELETE FROM image_counter;
END
как сделать регистронезависимый поиск по longblob?
WHERE column COLLATE utf8mb4_0900_ai_ci LIKE 'pattern'
Если я на каждый столбец, который используется в WHERE добавлю одиночные индексы, не ухудшит ли это производительность?
пока не понятно, какие индексы нужны, а какие нет.
Нужно получать курс первого дня, для выбранного периода - first, и последнего дня - last. Чтобы высчитать разницу. После чего {last} - {first} = {Х}. И вот по этому {Х} делать сортировку выборки.
SELECT DISTINCT
coin_uuid,
FIRST_VALUE(price) OVER (PARTITION BY coin_uuid ORDER BY last_updated ASC) firstprice,
FIRST_VALUE(price) OVER (PARTITION BY coin_uuid ORDER BY last_updated DESC) lastprice
FROM exchange_rates
ORDER BY coin_uuid, lastprice - firstprice
Очень мешает откуда-то самопроизвольно возникающая схема mydb, которую я не могу удалить.
таблицы стали создаваться именно в ней, а не в той схеме с которой я работаю
CREATE TABLE dbname.tablename ( .. );
) - таблица будет создана именно в указанной БД. Если же имя БД не указать - таблица создаётся в текущей БД. Почему у Вас именно эта БД текущая, и почему Вы не меняете её перед созданием таблиц запросом USE - это именно к Вам вопросы, и именно Ваша вина в том, что таблицы создаются "не там". что эффективнее: хранить в записи список id объектов, которые должны быть обработаны при обращении к этой записи, в виде строки (скрипт будет парсить строку и отрабатывать каждый id), либо сделать триггер и хранимую процедуру (MySQL), которая возьмёт эту работу на себя?
SELECT prices.*
FROM prices
JOIN ( SELECT size, MAX(`date`) AS `date`
FROM prices
WHERE price
-- AND `date` <= @some_date
GROUP BY size ) AS last_nonzero_date USING (size, `date`);
(size, `date`)
- уникально.Есть папка, которая хранит в себе sql файлы для создания бд, таблиц в этой бд, импорт данных в эти таблицы.
Как автоматизировать запуск этих sql скриптов?
нужно удалить записи с одинаковыми date и user_id
DELETE t1.*
FROM tablename t1
JOIN tablename t2 USING (date, user_id)
WHERE t1.id > t2.id
а лучше не создавать их
CREATE UNIQUE INDEX indexname ON tablename (date, user_id)
SELECT `p`.`sum`, `p`.`type`, `p`.`visit`
FROM `visits` AS `v`
JOIN `payments` AS `p` ON `v`.`id` = `p`.`visit`
WHERE DATE(p.date) = '2021-10-04' AND `v`.`office` = '1'
SELECT `p`.`sum`, `p`.`type`, `p`.`visit`
FROM `visits` AS `v`
JOIN `payments` AS `p` ON `v`.`id` = `p`.`visit`
WHERE p.date >= '2021-10-04'
AND p.date < '2021-10-05'
AND `v`.`office` = '1'
visits (office, id)
.payments (`date`, visit)
и payments (visit, `date`)
, посмотреть какой из них используется, удалить неиспользуемый.AND `v`.`office` = 1
. В исходном виде, если поле числовое, то и поле, и значение приводятся к floating-point number, и только потом сравниваются. SELECT p.*, GROUP_CONCAT(c.name) countries
FROM p
JOIN с ON FIND_IN_SET(c.id, p.country)
GROUP BY p.id