php - CodeIgniter - 从 n-2-n 关系表中获取并显示数据

标签 php mysql codeigniter activerecord fetch

您好,我需要一些帮助。我创建了 3 个数据库表

CREATE TABLE IF NOT EXISTS `products` (
`product_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`description` text,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

CREATE TABLE IF NOT EXISTS `features` (
`feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`features_name` varchar(100) NOT NULL,
`category_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`feature_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

CREATE TABLE IF NOT EXISTS `product_features` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(10) unsigned NOT NULL,
`feature_id` int(10) unsigned NOT NULL,
`feature_value` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

它们之间的关系是多对多的,因为一个产品可以有多个功能,一个功能可以属于多个产品,但每个产品的每个功能都有特定的值。

我的目标是获取属于特定产品的所有功能及其值,然后以表单(在我看来)显示它们,我可以在其中分配新值或编辑现有值。产品的特点。给你一个例子来说明我的观点:

// Assign new values or edit existing ones
<?php echo form_open(); ?>
    <table class="table">
        <?php echo form_hidden('product_id', $product->product_id); ?>
        <thead>
            <tr>
                <th>&nbsp;</th>
                <th>Feature</th>
                <th>Value</th>
            </tr>
        </thead>
        <tbody>
        <?php if(count($features) > 0): foreach($features as $feature): ?>
            <tr>
                <td><?php echo form_hidden('feature_id[]', $feature->feature_id); ?></td>
                <td><?php echo $feature->feature_name; ?></td>
                <td><?php echo form_input('value[]',set_value('value[]', $feature->value)); ?></td>
            </tr>
        <?php endforeach; else: ?>
            <tr>
                <td colspan="2"><h4 align="center">No Features available</h4></td>
            </tr>
        <?php endif; ?>
        </tbody>
    </table>
    <div>
        <?php echo form_submit('save_feature', 'Save Features', 'class="btn btn-primary"'); ?>
    </div>
<?php echo form_close(); ?>

我正在尝试在 phpmyadmin 中构建查询(以便使用 Active Record 创建它)并测试结果。这是查询

SELECT `features`.`feature_id` , `features`.`feature_name` , `product_features`.`value`
FROM `features`
LEFT JOIN `product_features` ON `features`.`feature_id` = `product_features`.`feature_id`
/* WHERE `product_features`.`product_id` =1 */

如果没有 WHERE 语句,我得到的结果如下:

feature_id |feature_name | value
1          | Processor   | NULL
2          | RAM         | NULL
3          | Hard Disk   | NULL

但是如果我包含 WHERE 语句(请记住我想要特定产品的值),我不会得到任何结果。我该如何解决这个问题,或者我应该做出哪些更改来纠正问题???任何帮助将不胜感激。

注1:一点细节:product_features 表当前为空,因为还没有分配(我从头开始),所以我想我可能必须动态创建查询。

注2:我已经为功能分配了(父)category_id,例如计算机、数码相机等,所以我想我还必须为查询指定category_id,以获得正确的功能。 (例如,Apple Imac(计算机类别)不应包含光学变焦功能,因为它属于数码相机类别)。

最佳答案

LEFT JOIN product_features ON features.feature_id = product_features.feature_idproduct_featuresproduct_id =1

替换位置和如上

关于php - CodeIgniter - 从 n-2-n 关系表中获取并显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739685/

相关文章:

php - 如何获取颜色和服务的 $row 数据

mysql - 为什么 codeigniter mysql 返回空数组

php - 如何在 CodeIgniter 中使用 PHP 根据条件显示表单字段?

php - 使用安全 PDO 从数据库中打印值

php - 如何告诉 PhpStorm 定义了某个变量

php - 无限滚动

php - "Call to a member function prepare()"背后的逻辑

mysql - 在存储过程中连接 3 个表时出现重复输出

mysql - 如何选择不同行的两个字段?

php - 代码点火器错误