在codeigniter中显示具有相同组名的多个记录

时间:2014-01-16 13:30:31

标签: php mysql codeigniter group-concat

我想用codeigniter中的数据库填充select下拉列表optgroup,因为我写了以下内容:

表:

+---+-------------+--------------+
|id | group_name  | location_name|
+---+-------------+--------------+
| 1 | top cities  | Bangalore    |
|   |             |              |
| 2 | top cities  | Chennai      |
|   |             |              |
| 3 | big cities  | Mumbai       |
|   |             |              |
| 4 | small cities| mumbai       |
|   |             |              |
| 5 | small cities| mumbai       |
+---+-------------+--------------+

要求:

           <select id="location" name="location">
                <option value="" selected="selected">Select Location</option>
                <optgroup label="top cities">
                    <option value="Bangalore">Bangalore</option>
                    <option value="Chennai">Chennai</option>
                </optgroup>
                <optgroup label="big cities">
                    <option value="Mumbai">Mumbai</option>
                </optgroup>
                <optgroup label="small cities">
                    <option value="Mumbai">Mumbai</option>
                    <option value="Mumbai">Mumbai</option>
                </optgroup>
           </select>

型号:

 function get_location() {
    $this->db->select('group_name,GROUP_CONCAT(location_name) AS locations');
    $this->db->order_by("group_name");
    $this->db->from('location');
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        foreach ($query->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
    return false;
}

查看:

            <select id="location" name="location">
                <option value="" selected="selected">Select Location</option>
                <?php
                $CI = & get_instance();
                $CI->load->model('Common', 'Common', TRUE);
                $results = $CI->Common->get_location();
                foreach ($results as $row) {
                    echo '<optgroup label="'.$row->group_name.'">';

                    $location = explode(',', $row->locations);
                    foreach ($location as $loc) {
                        echo '<option value="'.$loc.'">'.$loc.'</option>';
                    }

                    echo "</optgroup>";
                }
                ?>
            </select>

但结果与我要求的不同......

输出:

        <select id="location" name="location">
            <option value="" selected="selected">Select Location</option>
            <optgroup label="top cities">
                <option value="Bangalore">Bangalore</option>
                <option value="Chennai">Chennai</option>
                <option value="Mumbai">Mumbai</option>
                <option value="Mumbai">Mumbai</option>
                <option value="Mumbai">Mumbai</option>
            </optgroup>
       </select> 

请帮助任何人......提前致谢

2 个答案:

答案 0 :(得分:0)

这是因为您的查询错误。您应该在查询中添加以下行:

    $this->db->group_by('group_name');

另外,您不应该从视图中访问您的模型。您应该使用控制器从模型中获取数据并将其传递给视图。

答案 1 :(得分:0)

也尝试不同

  $this->db->distinct();

您放置查询的位置