Каждая табличка - это отдельный файл SQL.
не больше двух раз в неделю
select count(*) as cnt -- кол-во записей на этой неделе
from record as r
where r.user_id = ? -- пользователь
-- дата текущего понедельника (от curdate()) <= r.add_date < дата следующего понедельника (от curdate())
and r.add_date >= subdate(curdate(), interval weekday(curdate()) day) -- текущ. понедельник с точки зрения curdate()
and r.add_date < subdate(curdate(), interval weekday(curdate()) - 7 day) -- следующий понедельник с точки зрения curdate()
select count(*) as cnt -- кол-во записей за последние 7 дней
from record as r
where r.user_id = ? -- пользователь
and r.add_date > subdate(curdate(), interval 7 day)
select A.*
from (SELECT `date`, `name`, phone, count() over (partition by phone) phone_count
FROM `myusers`
) A
where A.phone_count > 1
ORDER BY date ASC
select `date`, `name`, phone, p.phone_count
from `myusers` as mu
join (SELECT phone, count(*) phone_count
FROM `myusers`
group by phone) p on p.phone = mu.phone
where p.phone_count > 1
ORDER BY mu.date ASC
SELECT A.*
from (
SELECT class_messages.id as class_messages_id,
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title,
row_number() over (partition by `class_messages_chat`.`chat_id` order by class_messages.id desc) rn -- этой функцией нумеруем в пределах чата сообщения
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
) A
where A.Rn = 1 -- оставляем, все что с первым номером счетчика
order by A.class_messages_id desc
SELECT A.*
from (
SELECT
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title,
IF(@prev <> `class_messages_chat`.`chat_id`, @rn:=1,@rn), @prev:= `class_messages_chat`.`chat_id`, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`,
(SELECT @rn:=1)rn,
(SELECT @prev:=-1)prev
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
order by class_messages.id desc
) A
where A.Rn = 1 -- оставляем, все что с первым номером счетчика
select B.*
from (SELECT A.*,
IF(@prev <> A.chat_id, @rn:=1,@rn), @prev:= A.chat_id, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
from (
SELECT
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
order by class_messages.id desc
) A,
(SELECT @rn:=1)rn,
(SELECT @prev:=-1)prev
) B
where B.Rn = 1 -- оставляем, все что с первым номером счетчика
select b.*, -- все колонки по книге
a.* -- все колонки по сведениям об авторе
from books as b
join book_autor as ba on b.book_id = ba.book_id -- если у книги может не быть авторов, то нужен left join
join autors as a on ba.autor_id = a.autor_id -- если у книги может не быть авторов, то нужен left join
where b.book_id = :book_id -- сюда подставляем параметр нужной книги.
DELETE FROM joom_user_usergroup_map -- m - забудьте про алиасы в делетах, пока работаете в MariaDB !
WHERE NOT EXISTS (SELECT * FROM joom_users u WHERE u.id = joom_user_usergroup_map.user_id -- будьте добры указывать имя таблицы полностью, которую обрабатывает delete
);
select A.*
from
(
select B.*,
row_number() over (partition by B.nomin_id order by B.countUser desc) rwnm -- партишином задаем область счета строк, а сортировкой - порядок счета
from
(
SELECT count(user_id) countUser, nomin_id, film_id
FROM votes
GROUP BY film_id , nomin_id
) B
) A
where rwnm <= 5 -- берем по этому количеству от каждого локального счета
Но всего в таблице 25 000 строк запрос выполняется 30 секунд, а потом крах.
Ручка; Цвет; Синий;
Ручка; Цена; 10
Нож; Материал; Дерево;
Нож; Цена; 200;
Нож; Рукоятка; Дерево;
Нож; Фото; Есть;
если в Mysql какие-то строки смогут загрузиться, а какие-то - нет,
SELECT brand_name, any_function(indeks_shvidkosti) as func_indeks_shvidkosti
FROM tires
group by brand_name
ORDER BY brand_name ASC
select point_lifetime, sum(point)
from t
group by point_lifetime
having sum(point) <= N -- N нужно рассматривать как входной параметр запроса
-- тестовые данные
with t as (select 1 id, 1 user_id, 10 point, from_unixtime(1701533439) point_lifetime
union
select 2 id, 1 user_id, 10 point, from_unixtime(1701533439) point_lifetime
union
select 3 id, 2 user_id, 10 point, from_unixtime(1001433439) point_lifetime
union
select 4 id, 1 user_id, -10 point, from_unixtime(1901533439) point_lifetime
union
select 5 id, 1 user_id, 100 point, from_unixtime(1801733439) point_lifetime)
-- экспериментальный запрос
select a.*
from (select t.id,
t.user_id,
t.point,
t.point_lifetime,
sum(t.point) over (partition by t.user_id) sum_point,
row_number() over (partition by t.user_id order by case when t.point > 0 then 0 else 1 end, -- продавливаем положительные баллы вверх
t.point_lifetime desc) rn -- локальный счетчик записей по пользователю, чтобы понять, какую запись хотите выдернуть из подзапроса, нужно сделать так, чтобы интересуемые записи имели rn = 1
from t
where point_lifetime > str_to_date('02.12.2023 10:00:00', '%d.%m.%Y %H:%i:%s') -- считаем, что отметка "сейчас" - это 02.12.2023 10:00:00
) a
where a.sum_point >= 30 -- берем все то, что больше минимальной суммы
and a.rn = 1 -- берем только интересуемую запись по каждому пользователю
order by id
SELECT u.* FROM users u
JOIN pp1 ON u.id = pp1.id and pp1.organization = 1
union
SELECT u.* FROM users u
JOIN pp2 ON u.id = pp2.id and pp2.organization = 1
ORDER BY name
LIMIT 15
SELECT u.* FROM users u
where exists (select 1 from pp1 where u.id = pp1.id and pp1.organization = 1 )
or exists (select 1 from pp2 where u.id = pp2.id and pp2.organization = 1 )
ORDER BY u.name
LIMIT 15
SELECT u.*
FROM users u
where exists (select 1
from pp
where u.id = pp.id
and pp.organization = 1
and pp.pp_type_id in (1, 2) -- собственно, в таблице содержится все, что раньше находилось в pp1 и pp2, появилось поле, которое отличает разновидности записей
)
ORDER BY u.name
LIMIT 15
select t.user_id,
count(*) as calls,
count(case when t.old_status = 'Open' then 1 end) as opened,
count(case when t.new_status = 'Assigned' then 1 end) as assigned
....
from log_ticket_statuses t
group by t.user_id
UPDATE b_uts_crm_company
SET UF_CRM_1696186645 = (SELECT b_crm_company.REVENUE
FROM b_crm_company
where b_crm_company.ID = b_uts_crm_company.VALUE_ID)
SELECT *
FROM table
join (select 1 id, 7 val union
select 2, 8 union
select 3, 5 union
select 4, 4 union
select 5, 1) tmp on table.id = tmp.val
order by tmp.id
select b.*
from (select a.*, -- атрибуты по агрегированной статистике
-- атрибуты записей-кандидатов на последние записи
s.id id_2,
s.product_id product_id_2,
s.warehouse_id warehouse_id_2,
-- ......
row_number() over (partition by s.product_id, s.warehouse_id, s.date order by s.id desc) r_num -- нумеруем кандидатов, по порядку id в статистике
from (select
product_id,
size,
warehouse_id,
max(date) later_date, -- поздняя дата
sum(orders) as orders
from stats
where date(`date`) >= '2023-09-01' and date(`date`) <= '2023-09-04'
group by product_id, warehouse_id, size
) a
left join stats s on s.date = a.later_date
and s.product_id = a.product_id
and s.warehouse_id = a.warehouse_id) b
where b.r_num = 1 -- берем первого кандидата (нужно проверить, будет ли null, если left join не присоединит запись)
try
{
$insert->execute($mediaData);
}
catch(Exсeption $e) // см. также типы исключений того модуля, который подключается к СУБД, можно реагировать только на них, если подставить нужный тип
{
// тут код, который выполняется в случае ошибки (не обязательно при взаимодействии с СУБД)
}
finally
{
// тут код, который выполняется при любом исходе
}
$conn = new mysqli("localhost", "y96360rs_a", "xR&O&&37", "y96360rs_a");
$sql = "UPDATE `admins` SET `login` = ?, `pass` = ?, `name` = ?, `role` = ? WHERE `id` = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssi', $login, $pass, $name, $role, $id);
$id = $conn->insert_id;
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство = :входная_приоритетная_характеристика
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc,
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end
+ -- очки приоритетов складываем
case
when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end
+
-- ... и так далее все характеристики
desc, --
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc, -- эта более важная характеристика
case
when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc, -- эта менее важная характеристика
-- ... и так далее все характеристики
<Другие условия сортировки (по дате добавления, имени и т.д.)>