Как построить сложный sql-запрос?

#sql #laravel

Вопрос:

Дизайн базы данных здесь

Я хочу получить записи из таблицы product_spec_data, связанные с продуктами, идентификатор категории которых равен 5.

Пожалуйста, помогите мне сделать запрос к базе данных…

Комментарии:

1.Что вы пробовали? Установлены ли отношения в ваших моделях? Это действительно не похоже на «сложный запрос…», просто простой hasManyThrough laravel.com/docs/8.x/eloquent-relationships#has-many-through

2. @gert-b Спасибо за подсказку, я постараюсь реализовать ее сейчас.

3. @gert-b, можешь показать пример? Как это должно выглядеть? Здесь я получаю коллекцию продуктов: $категория->продукты (). как мне сделать так, чтобы я получал только данные спецификации продукта.

Ответ №1:

Все взаимосвязи четко изложены, простое объединение между таблицами будет работать.

 SELECT psd.*
FROM product_spec_data psd
INNER JOIN product_spec_values psv ON psd.id = psv.product_spec_data_id
INNER JOIN products prod ON psv.product_id = prod.id
INNER JOIN categories cat ON prod.category_id = cat.id
-- with category id = 5
WHERE cat.id = 5;
 

Ответ №2:

Я не уверен, что вы подразумеваете под сложным запросом. Я предполагаю, что ваш вопрос не завершен. Я думаю, что запрос на ваш вопрос (если это T-SQL) будет следующим

 select d.* 
from product_spec_data d
left outer join product_spec_values v on d.id=v.product_spec_data_id
left outer join products p on v.product_id=p.id
where p.category_id=5
 

(Я думаю, что в MySQL также приведенный выше синтаксис останется прежним, вы можете удалить предложение [outer] в MySQL)