У меня следующий запрос SQL (база данных MYSQL):
SELECT images.alt, images.product_id, images.src
FROM wp_wps_images images
INNER JOIN wp_wps_products products
ON products.product_id = images.product_id
AND products.product_id IN ("2112055640177","2112056590449","2112055378033","2112062292081","2112058490993","2112062619761","2112062488689","2112066420849","2112061833329","2112052527217")
WHERE images.alt LIKE "%Swatch%"
Это здорово помогает мне вернуть набор результатов, который выглядит следующим образом:
Rust (W) - Swatch 2112058490993 foobar.com
Sand - Swatch 2112058490993 barfoo.com
Tan - Swatch 2112056590449 bazfoo.com
Generic Black - Swatch 2112056590449 tazfoo.com
Patterned / Multi - Swatch 2112055640177 mazfoo.com
Tan - Swatch 2112055640177 bazfoo.com
Generic Black - Swatch 2112055640177 tazfoo.com
Generic Black - Swatch 2112055378033 tazfoo.com
Dark Tobacco - Swatch 2112055378033 makazfoo.com
У меня есть tags
таблица, схема которой выглядит следующим образом id (BIGINT)
, tag_id (BIGINT)
, product_id (BIGINT)
, post_id (BIGINT)
, tag (VARCHAR)
. Я хотел бы присоединиться к этой таблице, чтобы для выбранных изображений я также мог прочитать их соответствующее tag
имя из таблицы тегов, но я не знаю, как написать правильное JOIN для достижения этой цели:
SELECT images.alt, images.product_id, images.src, tags.tag
Я надеюсь, что приведенное выше выражение вернет что-то вроде:
Rust (W) - Swatch 2112058490993 foobar.com color:rust
Sand - Swatch 2112058490993 barfoo.com material:sand
Tan - Swatch 2112056590449 bazfoo.com color:tan
Generic Black - Swatch 2112056590449 tazfoo.com color:black
Patterned / Multi - Swatch 2112055640177 mazfoo.com material:multi
Tan - Swatch 2112055640177 bazfoo.com color:tan
Generic Black - Swatch 2112055640177 tazfoo.com color:black
Generic Black - Swatch 2112055378033 tazfoo.com color:black
Dark Tobacco - Swatch 2112055378033 makazfoo.com color:dark-tobacco
Сейчас у меня есть что-то вроде следующего оператора SQL, и оно не приближает меня к моей цели:
SELECT images.alt, images.product_id, images.src, tags.tag
FROM wp_wps_images images
INNER JOIN wp_wps_products products
ON products.product_id = images.product_id
AND products.product_id IN ("2112055640177","2112056590449","2112055378033","2112062292081","2112058490993","2112062619761","2112062488689","2112066420849","2112061833329","2112052527217")
INNER JOIN wp_wps_tags tags
ON tags.product_id = products.product_id
AND tags.product_id = images.product_id
AND tags.tag LIKE "%:%"
WHERE images.alt LIKE "%Swatch%"
Вышеприведенное утверждение дает мне результаты, в которых много дублирования, и это далеко от моей цели сопоставить изображения с их именем тега. Результаты:
Tan - Swatch 2112052527217 bazfoo.com color:generic-black
Tan - Swatch 2112052527217 bazfoo.com depth:8
Tan - Swatch 2112052527217 bazfoo.com height:13
Tan - Swatch 2112052527217 bazfoo.com material:leather
Tan - Swatch 2112052527217 bazfoo.com strap:12-1-2
Tan - Swatch 2112052527217 bazfoo.com style:totes
Tan - Swatch 2112052527217 bazfoo.com width:19
Generic Black - Swatch 2112052527217 tazfoo.com color:generic-black
Generic Black - Swatch 2112052527217 tazfoo.com depth:8
Как написать оператор SQL для базы данных MYSQL, который возвращает изображения с соответствующим именем тега?
РЕДАКТИРОВАТЬ 1:
@ Дай оставил правильный комментарий ниже.
Ваш пример вывода данных не показывает, как вы хотите получать данные, когда
один продукт имеет несколько тегов
Для одного продукта, имеющего несколько тегов, я хочу, чтобы теги соответствовали только строке данных строки images.alt
. Альтернативные данные соответствуют следующей схеме: [color || material] - Swatch
. Данные тегов следуют следующей строковой схеме: [type]:[value]
.
Сравнение строк должно соответствовать части [color || material]
данных image.alt
и правой стороне двоеточия, стороне [value]
, для данных tags.tag
.