列MySQL / CodeIgniter的多个值

时间:2014-03-27 19:39:16

标签: php mysql codeigniter

我的应用程序中有三个表:productssizesproduct_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的顶部运行。您可以正常分享您的解决方案。

2 个答案:

答案 0 :(得分:7)

您可以在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)
    }
}

希望,这有助于:)

答案 1 :(得分:0)

你想做什么,你可以用一点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字符串的优点在于,当您对其进行格式化时,可能会使用它获得复杂的结构数据。