Я ищу какой-нибудь хороший способ оптимизировать эти запросы путем удаления подзапросов и реорганизации для возможных индексов, но я застрял (
1-й
SELECT
`clients`.`name`,`clients`.`id`
FROM
`clients`
WHERE
`id` NOT IN (
SELECT `orders`.`customer_id` FROM `orders`
WHERE `orders`.`order_date` BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
)
;
легенда: "клиенты"имена, которые не делали никаких заказов последние 7 дней "(или вообще не делали никаких заказов)
выглядит хорошо, работает хорошо, но вызывает у меня сомнения ...
2-nd
SELECT
`clients`.`name`,`clients`.`id`,COUNT(*)
FROM
`clients`
INNER JOIN `orders` ON
`clients`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id` ORDER BY COUNT(*) DESC,`id` LIMIT 0,5;
легенда: «Топ-5 покупателей, которые сделали наибольшее количество заказов в магазине»
Есть идеи получше? (
3-й
SELECT
`clients`.`name`
,SUM(`merchandise`.`price`) as `TotalPrice`
,count(*)
FROM
`orders`
INNER JOIN `clients` ON
`orders`.`customer_id` = `clients`.`id`
INNER JOIN `merchandise` ON
`orders`.`item_id` = `merchandise`.`id`
GROUP BY
`orders`.`customer_id`
ORDER BY
`TotalPrice` DESC
LIMIT
0,10
;
легенда: «10 лучших имен клиентов, которые сделали заказы на наибольшую сумму»
слишком медленное решение (((и понятия не имеем об индексах (
4-й * 1024)*
SELECT
`merchandise`.`name`
FROM
`merchandise`
WHERE `id` NOT IN
(
SELECT
`orders`.`item_id`
FROM
`orders`
WHERE
`orders`.`status` = 'complete'
)
;
легенда: «названия всех продуктов, на которые не было доставлено заказов»
снова - подзапрос ...
спасибо за помощь и любые идеи)