Проведя несколько месяцев, размышляя над тем, как я собирался собирать таблицы "JOIN", которые разделяют одинаковые столбцы и выводят их в формате, который можно искать и вызывать, я придумал это решение, в котором он создает "столбец", с именем набора, например stock_levels
, и вводит значения как JSON, чтобы впоследствии его можно было разобрать.
Это работает точно так же, как и предполагалось, однако проблема, которую я выбрал, - это раздел "WHERE", (product
. id
= quantity
. product_id
) возвращает все элементы в quantity
, которые идентификатор продукта, однако, если в нем есть любые элементы из quantity
с этим идентификатором продукта, сам продукт не возвращается, так как новые продукты, введенные в систему, не имеют никакого запаса или изображений, они не возвращаются системой.
Мой вопрос, таким образом, есть способ в основном делать это (но с кодом c, который работает)
WHERE ( `product`.`id` = `quantity`.`product_id` OR COUNT( `product`.`id` = `quantity`.`product_id` ) = 0 )
(т.е. вернуть продукт, если он не имеет записей в количестве)
И вот код используемого запроса:
SELECT DISTINCT `product`.*,
CONCAT( '[', GROUP_CONCAT( '{', '"id":"', `quantity`.`id`, '"', ',', '"sku":"', `quantity`.`sku`, '"', ',', '"product_id":"', `quantity`.`product_id`, '"', ',', '"criteria":"', `quantity`.`criteria`, '"', ',', '"quantity":"', `quantity`.`quantity`, '"', ',', '"price":"', `quantity`.`price`, '"', '}' SEPARATOR ',' ), ']' ) as `stock_levels`,
CONCAT( '[', GROUP_CONCAT( '{', '"id":"', `product_image`.`id`, '"', ',', '"product_id":"', `product_image`.`product_id`, '"', ',', '"location":"', `product_image`.`location`, '"', ',', '"type":"', `product_image`.`type`, '"', ',', '"order":"', `product_image`.`order`, '"', '}' SEPARATOR ',' ), ']' ) as `images`
FROM (`product`, `quantity`, `product_image`)
WHERE ( `product`.`id` = `quantity`.`product_id` )
AND ( `product`.`id` = `product_image`.`product_id` )
AND `online` = 1
GROUP BY `product`.`id`
ORDER BY date_added desc
Вы хотите преобразовать свои внутренние соединения в Left Joins
FROM
product p
LEFT JOIN quantity q
ON p.id = q.product_id
LEFT JOIN product_image pi
ON p.id = pi.product_id
WHERE
p.online = 1
Это предполагает, что он-лайн находится в таблице продуктов, если его не нужно переместить в JOIN.
Также вы должны использовать ANSI 92 в любом случае
Я думаю, что вы хотите, чтобы в таблицу количества осталось левое внешнее соединение... Это означает, что любая запись в таблице в левой части соединения будет ВСЕГДА включаться вне зависимости от соответствия правой стороне соединения..
select ...
from product left outer join quantity
on product.id = quantity.product_id,
product_image
where
product.id = product_image.product_id