php - CodeIgniter 中具有表关联的产品的颜色数组

标签 php mysql codeigniter

我的应用程序中有这三个表:

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/

相关文章:

php - 使用 Zend Framework 重定向传递参数而不附加到 URL

c# - 通过 C# 将图像添加到 blob (mysql)

mysql - 使用 Active Record 在 CodeIgniter 中的查询中的 DATE_FORMAT 不起作用

php - Ajax 代码无法与 codeigniter、PHP 一起使用。?

php - Codeigniter 不允许用户向数据库添加重复的电子邮件

javascript - 使用作为 URL 参数传递的 jQuery 选择器 - 安全吗?

php - cURL——cookie 和 session

php - PHP中没有错误信息

mysql - Row 不想在 mysql 中添加更多表,因为时间戳

java - JDBC:使用流从远程 MySQL 数据库导出/导入 CSV 原始数据(SELECT INTO OUTFILE/LOAD DATA INFILE)