Как правильно задать запрос к нескольким таблицам?
Добрый вечер.
Сайт - интернет магазин.
У меня задача, выбрать с таблицы, где хранятся id товаров и id категории, только те id товаров, которые имеют категорию 175. также вытащить по ним все данные (заголовки, метатеги и многое другое, что хранится в других таблицах).
Для этого я состряпал такой вот запрос. Но беда в том, что после такого запроса перенагружается сервак и все сайты на нем "отдают 504". Аналогичные запрос задавал на денвере. Та же ситуация - ничего не возвращает, зато все сайты которые на денвере перестают открываться.
PS на сайте около 20 тысяч позиций товаров.
В чем может быть проблема?
SELECT a.products_id, a.categories_id, b.products_name, b.products_id, b.products_description, b.products_short_description, b.products_keywords, b.products_meta_title, b.products_meta_description, b.products_meta_keywords, c.products_image, c.products_price, c.products_price2, c.products_ordered, d.options_values_price, e.products_attributes_filename, e.products_attributes_password, e.products_attributes_maxdays
FROM products_to_categories a
INNER JOIN products_description b
INNER JOIN products c
INNER JOIN products_attributes d
INNER JOIN products_attributes_download e
ON a.products_id = b.products_id
WHERE a.categories_id = 175
Судя по коду тут full join для таблиц c,d,e и записи в выборке перемножаются. В итоге вместо 1000 записей возвращается 1000 миллиардов записей и сервер падает при попытке построить датасет.
Не понял а у них вообще общий связной столбец то есть? product_id?
Если есть,то:
SELECT a.products_id, a.categories_id, b.products_name, b.products_id, b.products_description, b.products_short_description, b.products_keywords, b.products_meta_title, b.products_meta_description, b.products_meta_keywords, c.products_image, c.products_price, c.products_price2, c.products_ordered, d.options_values_price, e.products_attributes_filename, e.products_attributes_password, e.products_attributes_maxdays FROM a
INNER JOIN b ON b.product_id=a.products_id
INNER JOIN c ON c.products_id=a.products.id
INNER JOIN d ON d.productions_id=a.productions.id
INNER JOIN e ON e.productions_id=a.productions.id
WHERE a.categories_id = 175
Если нет, то приведите хотя бы по 3-4 строки каждой таблицы, а то нифига не понятно что за там у вас каша, что каждый параметр в отдельной таблице хранится. Мне кажется, что тут у вас сейчас без GROUP BY ничего не получится, а для этого нужно знать что творится в таблицах