@siroper

Как правильно сформировать запрос на вывод из нескольких таблиц в один формат?

Здравствуйте. Пытаюсь сформировать сложный запрос, но много попыток, поиска решений не дает результата, не достаточно опыта для такого. Прошу помощи. Важно не вносить изменения в структуру таблицы

Имеется 4 таблицы:

1. categories
id---parent_id---name
22---0---Велосипеды
23---0---Самокаты
24---0---Скутеры


2. products
id---name---url---category_id---images---title---sku---variant
1---Велосипед---velosiped---22---0---Вело---123---красный
2---Веломопед---velomoped---22---0---Вело---123---красный


3. newcategories
id---parent_id---name---join_category
1---0---велосипеды партнера---22
2---0---самокаты партнера---23
3---0---электрические велосипеды партнера---22


4. newproducts
id---name---url---new_category_id---video---images---title
1---Новый велосипед---newvelosiped---1---нет---нет---красный новый велосипед
2---Новый веломопед---newvelomoped---1---нет---нет---синий новый веломопед
3---Электровелосипед---electrovel---3---нет---нет---элвелосипед
4---Самокат партнера---samokat---2---нет---нет---самокат


По сути это 2 разных каталога. Т.е. у products category_id относится к таблице categories
У newproducts category_id относится к newcategories

Задача состоит в том, чтобы вывести все товары категории ID:22 (велосипеды) и все товары из newproducts, у которых newcategories (их может быть несколько) имеет join_category как ID категории - 22.

Т.е. если мы берем WHERE category_id = 22, то вывестись должны строки:
id---name---url---category_id---images---title---sku---variant---video---new_category_id
1---Велосипед---velosiped---22---0---Вело---123---красный---нет---нет
2---Веломопед---velomoped---22---0---Вело---123---красный---нет---нет
1---Новый велосипед---newvelosiped---нет---нет---красный новый велосипед---нет---нет---нет---1
1---Новый веломопед---newvelomoped---нет---нет---синий новый веломопед---нет---нет---нет---1
1---Электровелосипед---electrovel---нет---нет---элвелосипед---нет---нет---нет---3


Последний вариант запроса - не работает:

SELECT p.*, np.* FROM products as p 

LEFT JOIN newcategories as nc
ON nc.join_category = p.category_id

LEFT JOIN newproducts as np
ON np.new_category_id= nc.id

WHERE p.category_id = 22
order by p.id
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
(SELECT ...
  FROM `products`
  WHERE `category_id` = :categoryId
)
  UNION
(SELECT ...
  FROM `newproducts`
  WHERE `new_category_id` IN (
    SELECT `id`
      FROM `newcategories`
      WHERE `join_category` = :categoryId
  )
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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