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, -- эта менее важная характеристика
-- ... и так далее все характеристики
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from verbs
order by darg-w
select *
from verbs
order by id
select *
from verbs
order by position -- дополнительное поле, в которое будете сами или программно вбивать порядок сортировки
select *
from verbs
order by case when id = 100 then 0 else 1 end -- даем записи id=100 наивысший приоритет, в любом состоянии списка она будет на 1 месте!
, id -- остальные записи отсортируются в порядке добавления
update superbase.table1
set theme = replace(theme, 'комплект', '')
where theme like '%комплект%'
Но для это подойдет для поиска одного размера, а мне прилетает несколько. Не ужели скажем если 10 размеров прилетит, писать 10 запросов для проверки каждого размера?
select * from table
where 1 = 1 -- чтобы можно было однотипно подставить выражения с and или or, не заморачиваясь в каких случаях нужен and/or, а в каких нет.
or find_in_set('L', replace(value, ';', ','))
or find_in_set('XL', replace(value, ';', ','))
...
or find_in_set('XXXL', replace(value, ';', ','))
SELECT * FROM tavle
WHERE JSON_EXTRACT(json, '$') = jsons; -- атрибут json относится к таблице tavle, а jsons - плейсхолдер, куда вы подставляете строку, по которой будете искать тело?
-- JSON_EXTRACT(атрибут_типа_JSON, '$') - это выражение конвертирует JSON в строку, аналогично как в JS будет JSON.stringify(объект_с_данными).