我的应用程序中有三个表:products
,sizes
和product_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的顶部运行。您可以正常分享您的解决方案。
答案 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字符串的优点在于,当您对其进行格式化时,可能会使用它获得复杂的结构数据。