'product_name_' AS `product_name`, variation.price as `cost.price`, null as `cost.sale_price`, variation.stock_status as `cost.stock_status`, JSON_EXTRACT(`products`.`img`, '$[0]') AS `img`, `_v`, `categoryId`, `name_attr`, `slug` FROM `products` AS `products` LEFT JOIN variations AS variation on variation.id = (select id from variations where variations.productsId = products.id_product group by price limit 1) WHERE `products`.`show` = true AND `products`.`trash` = false ORDER BY `products`.`_v` DESC LIMIT 4
С наскока можно только сказать, что DISTINCT можно попробовать заменить группировкой, а танцы с LIMIT и ORDER - оконной ф-ей
можно подробнее пожалуйста?
Ну DISTINCT id_product, type, 'product_name_' AS product_name, variation.price as cost.price, null as cost.sale_price, variation.stock_status as cost.stock_status, JSON_EXTRACT(products.img, '$[0]') AS img, _v, categoryId, name_attr, slug = select id_product, type, 'product_name_' AS product_name, variation.price as cost.price, null as cost.sale_price, variation.stock_status as cost.stock_status, JSON_EXTRACT(products.img, '$[0]') AS img, _v, categoryId, name_attr, slug.... group by id_product, type, 'product_name_' AS product_name, variation.price as cost.price, null as cost.sale_price, variation.stock_status as cost.stock_status, JSON_EXTRACT(products.img, '$[0]') AS img, _v, categoryId, name_attr, slug
на этот код упала ошибка.. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`product_name, variation.price as cost.price, null as cost.sale_price, varia tion' at line 1
Прям его исполнять не надо)
вот такие конструкции тяжело работают по причине order by, postgresql должен всю выборку отсортировать и из нее отдать вам 4 записи. как минимум индекс по выражению order by надо иметь. и distinct тудаже.
А что бы Вы могли посоветовать в моем случае?
добавить условие по дате например, чтобы только за текущий день или месяц
FROM products AS products LEFT JOIN variations AS variation on variation.id = (select id from variations where variations.productsId = products.id_product group by price limit 1) WHERE products.show = true AND products.trash = false ORDER BY products._v DESC LIMIT 4 Тут два SARG на boolean - селективность вряд ли высокая. НОЛЬ шансов на оптимизацию. И ещё там JOIN не по равенству - это вообще самоубийство. Один шанс у запроса - если в product будет очень мало записей, типа до 10 тысяч.
выбросить запрос, написать заново. НЕ показывать все товары, а только нужные, которые искать по критериям, а не просто тупо все. Убрать JOIN на variation - показывать его потом, если будет нужно пользователю. ЛИБО предвычислять нужный variation c минимальной (или какой нужно) ценой и сохранять прямую ссылку в product. В общем, не должно быть JOIN не по = Убрать distinct он на хер не нужен. Дубликаты товаров есть ? Ведите тов. номенклатуру должным образом.
Обсуждают сегодня