Выберите три записи в одном запросе кросс-таблицы, которая содержит записи двух таблиц - MYSQL - PullRequest
0 голосов
/ 06 марта 2019

У меня есть главная таблица с именем "product", которая связана с тремя таблицами:

"product_type", 
"feature", 
"type_feature" 

и кросс-таблица "product_feature", содержащая несколько функций одного и того же продукта.

Пример первой записи:

У меня есть что-то похожее на это:

product_type

id_product_type    name
    1              Phone

особенность

id_feature   name
    1         Memory 
    2         Color 
    3         Memory Ram

FEATURE_TYPE

id_feature_type  id_feature  value
      1              1         16GB
      2              1         32GB
      3              2         Blue
      4              2         Black
      5              3         2GB
      6              3         3GB  

продукт

id_product id_product_type  price quantity  model
    1           1           100$    5      Moto-G7 

Кросс-таблица "product_feature" (связана с "product", "feature" и "feature_type"):

id_feature id_product id_feature_type
    1          1            1
    2          1            3
    3          1            6

Я хочу запрос показать это:

id_product   type_name price quantity   model    feature_name  value  
    1        Phone     100$     5      Moto-G7     Memory       16GB
feature_name2 value2  feature_name3   value3
    Color      Blue    Memory Ram       3GB

Я пробовал это, но только у меня есть только одно имя_функции и значение, а мне нужно три:

  SELECT p.id_product, pt.name, model, price, quantity, f.name AS feature, ft.value
  FROM product p
  LEFT JOIN product_type pt ON pt.id_product_type = p.id_product_type 
  LEFT JOIN product_feature pf ON pf.id_product = p.id_product
  LEFT JOIN feature f ON f.id_feature = pf.id_feature
  LEFT JOIN feature_type ft ON ft.id_feature_type = pf.id_feature_type
  GROUP BY p.id_product;

1 Ответ

1 голос
/ 06 марта 2019

Попробуйте этот запрос, он даст вам результаты:

SELECT product.*, product_type.name as TypeName, (SELECT CONCAT( GROUP_CONCAT(feature_type.value), "|", GROUP_CONCAT(feature.name) ) FROM `product_feature` INNER JOIN feature_type on product_feature.id_feature_type = feature_type.id_feature_type INNER JOIN feature on feature_type.id_feature = feature.id_feature WHERE product_feature.id_product=1 GROUP BY product_feature.id_product) as options FROM `product` LEFT JOIN product_type on product.id_product_type = product_type.id_product_type

enter image description here

Вы получите параметры для вашего продукта, и вам придется взорвать () эти параметры с помощью "|" и вы можете подсчитать, сколько вариантов у вас есть, используя $ count = count (explode ("|", $ options))

Таким образом, вы можете получить все варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...