我的应用程序中有这三个表:
table: products
columns: id, name, price
table: colors
columns: id, name, products_count
table: product_colors
columns: id, product_id, color_id
就我而言,一个产品可以有多种颜色。这是我用来获取产品的查询:
SELECT products.id, products.name, products.price
FROM products
那么,如何通过数组获取特定产品的所有颜色呢?像这样的事情:
SELECT products.id, products.name, products.price, colors.name color
FROM products
LEFT JOIN product_colors ON product_colors.product_id = products.id
INNER JOIN colors ON colors.id = product_colors.color_id
上面的语法是怎么回事?
colors.name
列仅检索一种颜色。
在 PHP/CodeIgniter 中我只想做这样的事情:
view.php:
<h1><?php echo $product->name; ?></h1>
<div class="colors">
Colors available:
<?php foreach ($product->colors as $color) { ?>
<?php echo $color->name; ?>
<?php } ?>
</div>
这可以使用 native CodeIgniter 执行吗?我的意思是,没有 Doctrine 或其他 ORM?
最佳答案
您可以使用GROUP_CONCAT
最终的查询看起来像这样:
SELECT products.id, products.name, products.price, GROUP_CONCAT(colors.name ORDER BY colors.name SEPARATOR '+') colors
FROM products
LEFT JOIN product_colors ON product_colors.product_id = products.id
INNER JOIN colors ON colors.id = product_colors.color_id
GROUP BY products.id
然后在结果输出中:
[...]
$colorArray = explode("+", $product->colors); //this is your array of color names.
您可以使用 CodeIgniter 的 Active Record 来编写此内容。但是,它可能会导致大数据 block 的性能问题。
关于php - CodeIgniter 中具有表关联的产品的颜色数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840633/