Задать вопрос

Как правильно составить SQL запрос для страницы?

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

есть таблицы:
Товары:
id | name | desc | price
Рецепты:
id | name | own_id | product_use_1 | product_use_2 ... product_use_9

Комментарии:
id | product_id | comment | own_id
Пользователи:
id | name

Нужно соеденить вытащить следующие данные:

1. Есть ID товара
2. Нужно найти совпадения id в Рецептах в каком-то из 9 product_use
2.1 Достать всю информацию о рецепте.
3. Достать комментарии где product_id совпадает с ID товара
4. Достать id,name пользователя для всех комментариев к данному товару по own_id в комментарии

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

Что будет лучше и как это более правильно реализовать?
Подскажите пожалуйста, буду очень благодарен
  • Вопрос задан
  • 292 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
@nozzy
Symfony, Laravel, SQL, Python, Telegram
Если правильно понял:
select
usr.*,
recept.*
from 
(
	select distinct
	t2.*
	from tovary t1
	inner join recepty t2 	on t2.product_use_1 = t1.id
							or t2.product_use_2 = t1.id
							or t2.product_use_3 = t1.id
							// и тд до t2.product_use_9
      where t1.id = ####
) as recept
inner join 
(
	select
	t1.id,
	t1.name,
	t2.own_id
	from 
	users  t1
	inner join comments t2 on t1.id = t2.own_id
) as usr on usr.own_id = recept.own_id
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
пиши что получилось, не забудь в CODE оформить
Ответ написан
petermzg
@petermzg
Самый лучший программист
Это зависит только от ваших конечных целей.
Если вам нужны только комментарии то через join.
Если комментарии можно позже подгрузить, то сделайте в несколько запросов.
Ответ написан
@kretsu
Немного смутила таблица "Рецепты"
Это Ваша система и база, т.е. Вы ли ее проектировали?
Просто листы так в базах обычно не делают.
Что касаемо запроса то можно начать так, чтоб получить список рецептов
SELECT DISTINCT r.*
FROM Рецепты r,
Товары t
WHERE t.id = XXXX AND( t.id = r.product_use_1 OR t.id = r. t.product_use_2 OR ........... t.id = r. t.product_use_9)

Но еще раз предлагаю по возможности пересмотреть и переделать таблицу Рецептов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы