Я пытаюсь оптимизировать свои запросы MySQL, и мне нужна помощь. Вот мой текущий запрос:
SELECT *,
(SELECT name FROM stores WHERE id = products.store_id) AS store_name,
(SELECT username FROM stores WHERE id = products.store_id) AS store_username,
(SELECT region_id FROM stores WHERE id = products.store_id) AS region_id,
(SELECT city_id FROM stores WHERE id = products.store_id) AS city_id,
(SELECT name FROM categories_sub WHERE id = products.subcategory_id) AS subcategory_name,
(SELECT name FROM categories WHERE id = category_id) AS category_name
FROM products
WHERE date_start <= DATE(NOW()) AND date_end >= DATE(NOW())
Я почти уверен, что это может быть быстрее.
У меня также есть проблема, когда я пытаюсь выбрать все продукты по region_id (добавив что-то вроде «AND region_id = MYID»), это не работает, и мне интересно, возможно ли заставить его работать и как?
Спасибо за ваше время!
Решение
Вот мой последний запрос, может ли он кому-нибудь помочь:
SELECT p.*,
s.name AS store_name,
cs.name AS subcategory_name,
cat.id AS category_id, cat.name AS category_name,
c.id AS city_id, c.name AS city_name,
r.id AS region_id, r.name AS region_name
FROM products p
JOIN stores s ON (s.id = p.store_id)
JOIN categories_sub cs ON (cs.id = p.subcategory_id)
JOIN categories cat ON (cat.id = cs.category_id)
JOIN cities c ON (c.id = s.city_id)
JOIN regions r ON (r.id = c.region_id)
WHERE DATE(NOW()) BETWEEN p.date_start AND p.date_end
Спасибо!