0

こんにちは、助けてください。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 ;

1 つの製品が多くの機能を持つことができ、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 (コンピュータ カテゴリ) は、デジタル カメラ カテゴリに属しているため、光学ズーム機能を含めるべきではありません)。

4

1 に答える 1

1

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

上記のように場所を置き換えます

于 2013-09-11T11:21:13.020 に答える