列MySQL/CodeIgniter的多个值

Gui*_*nge 1 php mysql codeigniter

有三个表在我的应用程序:products,sizes和product_sizes.

结构是这样的:

产品表:

id INT(11)
name VARCHAR(48)
Run Code Online (Sandbox Code Playgroud)

尺寸表:

id INT(11)
name VARCHAR(48)
Run Code Online (Sandbox Code Playgroud)

product_sizes'表:

id INT(11)
product_id INT(11)
size_id INT(11)
Run Code Online (Sandbox Code Playgroud)

如您所见,有些产品有三种尺寸.我需要向用户展示这三种尺寸的名字.

我现在在PHP中有什么:

index.php(查看)

<?php

[...]

foreach ($products as $product) {
    echo $product->name; // for each item, show its name
}
Run Code Online (Sandbox Code Playgroud)

我希望迭代大小就像那样:

<?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)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何以与上述一致的方式使尺寸与产品一起工作?

我的查询现在是:

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
Run Code Online (Sandbox Code Playgroud)

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

Rav*_*a ツ 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
Run Code Online (Sandbox Code Playgroud)

在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)
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)