一个列的多个值MySQL/CodeIgniter


Multiple values for a column MySQL/CodeIgniter

我的应用程序中有三个表:products, sizesproduct_sizes

结构如下:

产品表:

id INT(11)
name VARCHAR(48)

大小的表:

id INT(11)
name VARCHAR(48)

product_sizes表:

id INT(11)
product_id INT(11)
size_id INT(11)
如你所见,有些产品有三种尺寸。我需要向用户显示这三种尺寸以及它们的名称。

我现在在PHP中的内容:

index . php(视图)

<?php
[...]
foreach ($products as $product) {
    echo $product->name; // for each item, show its name
}

我想迭代大小,就像这样:

<?php
[...]
foreach ($products as $product) {
    [...]
    echo $product->name;
    foreach($product->sizes as $size) {
        echo $size; // for each item, shows its available sizes (s, M, L, for example)
    }
}

我如何使尺寸以一致的方式与产品一起工作,如上图所示?

我的查询,现在是:

SELECT products.id, products.name, sizes.name FROM products
JOIN product_sizes ON product_sizes.product_id = products.id
JOIN sizes ON product_sizes.size_id = sizes.id

我标记为CodeIgniter,因为如果有办法通过它的ACtiveRecord来解决这个问题,没有问题,因为我的应用程序运行在CI的顶部。你可以正常分享你的解决方案

您可以在SQL查询中使用GROUP_CONCAT()在一列中连接多个大小,然后处理该单元格值。

SELECT products.id, products.name,  GROUP_CONCAT( sizes.name ) available_sizes 
FROM products
     JOIN product_sizes ON product_sizes.product_id = products.id
     JOIN sizes ON product_sizes.size_id = sizes.id
group by products.id
PHP中的

可以这样使用:

foreach ($products as $product) {
    [...]
    echo $product->name;
    $available_sizes=explode(",",$product->available_sizes);
    foreach($available_sizes as $size) {
        echo $size; // for each item, shows its available sizes (s, M, L, for example)
    }
}

希望,这有帮助:)

你想做什么,你可以用一点SQL来实现它,检查这个,这是一个例子,获得分组值(你想做的)到一个字段:

http://sqlfiddle.com/!2/400994/20

在你的例子中,你应该这样做:

SELECT 
  p.id
, p.name
, CONCAT( "[", GROUP_CONCAT( s.name SEPARATOR ", "), "]" ) sizes
FROM products p
INNER JOIN product_sizes ps
ON ps.product_id = p.id
INNER JOIN sizes s
ON ps.size_id = s.id
GROUP BY p.id

在你的PHP中,使用json_decode,你会得到你想要的值。

foreach ($products as $product) {
    [...]
    echo $product->name;
    $product_sizes = json_decode($product->sizes);
    foreach($product_sizes as $size) {
        echo $size; // for each item, shows its available sizes (s, M, L, for example)
    }
}

JSON字符串的优点是,当你格式化它时,你可能会得到复杂的结构数据。