嗨,我想要一些帮助。我创建了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> </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以获得corect功能。 (例如,Apple Imac(在计算机类别中)不应包含光学变焦功能,因为它属于数码相机类别。)
答案 0 :(得分:1)
LEFT JOIN product_features
ON features
。feature_id
= product_features
。feature_id
和product_features
。product_id
= 1
替换上面的地方