I've looked everywhere (I think I have) and can't find an answer or if this is even possible. I've got 3 database tables:
(1) product_option_image - with the following 3 columns
product_id image product_option_value
1 1-additional-image-1.jpg 234
1 1-additional-image-2.jpg 234
1 1-additional-image-3.jpg 237
2 main_image-2.jpg 265
2 2-additional-image-1.jpg 975
2 2-additional-image-2.jpg 265
(2) product - with the following 3 columns
product_id image backimage
1 main_image-1.jpg backimage-1.jpg
2 main_image-2.jpg backimage-2.jpg
(3) product_option_value - with the following 3 columns
product_id product_option_value link
1 234 0
1 234 0
1 237 1
2 265 0
2 975 1
2 265 0
I'm trying to produce a list of the "additional" images from (1) product_option_image that aren't "links" (table (3) product_option_value.link) and aren't a main_image (table (2) product.image) which is easy enough, but I want to add the backimage from table (2) (product.backimage) to the image column as a new row - just once. At the moment, I have the following:
$notlinkImages = $this->db->query("SELECT i.*, z.backimage FROM " . DB_PREFIX . "product_option_image AS i
LEFT JOIN " . DB_PREFIX . "product AS z ON (z.product_id = i.product_id)
LEFT JOIN " . DB_PREFIX . "product_option_value v ON (i.product_option_value_id = v.product_option_value_id)
WHERE i.product_id = '" . (int)$row['product_id'] . "' AND ( v.link IS NULL OR v.link = 0 ) AND ( z.image != i.image)")->rows;
It produces an output like so:
product_id image product_option_value backimage
1 1-additional-image-1.jpg 234 backimage-1.jpg
1 1-additional-image-2.jpg 234 backimage-1.jpg
2 2-additional-image-2.jpg 265 backimage-2.jpg
But what I am after is:
product_id image product_option_value
1 1-additional-image-1.jpg 234
1 1-additional-image-2.jpg 234
1 backimage-1.jpg
2 2-additional-image-2.jpg 265
2 backimage-2.jpg
Could someone please tell me if/how this can be done? Thanks
In your case you can use UNION ALL
to union the option images and backimages.
For example:
select poi.product_id,poi.image from product_option_image poi
inner join product p on p.product_id = poi.product_id
inner join product_option_value pov on pov.product_id = poi.product_id
and pov.product_option_value = poi.product_option_value /* in your table the column name is `product_option_value` but in your code it's `product_option_value_id`,so...it doesnt matter here you can fix it by yourself */
where p.image != poi.image and (pov.link IS NULL or pov.link = 0)
union all
select product_id,backimage as image from product;
By the way you table 3 product_option_value
contain duplicates, it will cause duplicate results after join.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.