mysql

时间:2016-10-20 21:05:16

标签: mysql sql

我知道我的问题有点奇怪,但我会尽量让它变得清晰。

products_table
        ID | code | product_variants_id | product_name | variants     | variants_value   
        1  |     1|  123451             | beer cake    | color        | blue
        2  |     1|  123451             | beer cake    | temperature  | cold
        3  |     1|  123451             | beer cake    | weight       | 0.5
        4  |     2|  123453             | ad wrap      | color        | green
        5  |     2|  123453             | ad wrap      | weight       | 1

这是我的最终产品表,现在显示产品,这就是我所做的。

SELECT xx.code, GROUP_CONCAT(xx.variants) AS variants,
        GROUP_CONCAT(xx.variants_value) AS variants_value , 
        xx.product_name, xx.product_variants_id 
FROM products_table xx 
GROUP BY xx.product_variants_id

在此查询之后,我的表看起来像这样

       code | product_variants_id   | product_name | variants                | variants_value   
         1  |   123451              | beer cake    | color,temperature,weight| blue,cold,0.5
         2  |   123453              | ad wrap      | color,weight            | green,1  

现在我可以直接浏览此表并逐个获取产品并显示它的变体。

我真正的问题是,有没有办法将我刚刚获得的这些连接结果联系起来?

例如:  在服务器端,我可以获得变体color,如何获得color的相应值?

我的方法是什么?

2 个答案:

答案 0 :(得分:3)

首先将变量和相应的值连接在一起,然后执行group_concat()

SELECT xx.code, GROUP_CONCAT(concat(xx.variants,':',xx.variants_value)) AS variants_and_values, xx.product_name, xx.product_variants_id
FROM products_table xx
GROUP BY xx.product_variants_id, xx.product_name, xx.code

答案 1 :(得分:1)

例如,您可以获取结果数据并对其进行迭代。

PHP实施:

foreach ($data as $key => $item) {
    $data[$key]['variants'] = explode(',', $item['variants']);
    $data[$key]['variants_value'] = explode(',', $item['variants_value']);
}

因此您将$data[$key]['variants'][0]保持颜色并$data[$key]['variants_value'][0]保持其值