使用codeigniter逐个用逗号输出分隔mysql行中的多个值

时间:2016-03-05 17:48:59

标签: php mysql database codeigniter

我希望在逗号分隔的MySql行中输入多个值,并使用Codeigniter在下拉列表中显示用户。例如,一个普通网站产品有各种值,如产品(颜色:红色,白色,蓝色,橙色),这些不同的值存储在一行中,并在下拉列表中向用户显示这些值。 我目前的清单显示为: enter image description here

这是我的代码: 的模型

public function get_all()
    {
        $this->db->select()
                 ->from('vendor_products')
                 ->order_by(1,'DESC');
        $data = $this->db->get();
        $query = $data->result_array();

        foreach ($query as $result) {

            if ($result['color_values']) {
                $result['color_values'] = explode(',' , $result['color_values']);
            }
            if ($result['size_values']) {
                $result['size_values'] = explode(',',$result['size_values']);
            }
        }
        return $query;
    }

控制器

public function index()
    {
        $this->load->model('cartm');
        $data['posts'] = $this->cartm->get_all();
        $this->load->view('cart/index',$data);
    }

查看:

<?php foreach($posts as $post) : ?>
            <li>
                <form method="post" action="<?=base_url();?>cart_test/add/">

                    <p><?=$post['pro_name'];?></p>

                    <img style="width: 100px;height: 100px" src="<?=base_url();?>uploads/<?=$post['prod_image'];?>">

                    <p>$<?=$post['prod_price'];?></p>

                    <?php if($post['color_values']) : ?>
                        <p>Color: <select>
                            <option><?=$post['color_values']?></option>
                        </select></p>
                    <?php endif; ?>

                    <?php if($post['size_values']) : ?>
                        <p>Size: <select>
                            <option><?=$post['size_values'];?></option>
                        </select></p>
                    <?php endif; ?>

                </form>
            </li>
        <?php endforeach; ?>

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是创建一个看起来像这样的视图:

SELECT p.prod_id, p.pro_name, p.prod_image, GROUP_CONCAT(CONCAT(opt_color.option_value_id, '::', opt_color.option_value_name) SEPARATOR '||') AS color_options
    FROM vendor_products AS p
    LEFT JOIN vendor_products_options AS opt_color ON p.prod_id = opt_color .prod_id AND opt_color .option_id = 1
    GROUP BY p.prod_id
    -- Other joins for other options varying the option_id

请参阅此处的group_concat()函数参考:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

然后使用模型的视图而不是表本身。提取选项的代码如下所示:

    foreach ($query as $result) {
        if (!empty($result['color_options'])) {
            $result['color_options'] = explode('||', $result['color_options']);
        }
    }

在视图中为select生成HTML的代码:

<?php if($post['color_options']) : ?>
    <p>Color: 
    <select>
        <?php
        foreach($post['color_options'] as $optValue) {
            $option_array = explode('::', $optValue);
        ?>
        <option value="<?=$option_array[0]?>"><?=$option_array[1]?></option>
        <?php
        foreach() {
        ?>
    </select>
    </p>
<?php endif; ?>