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

Posted

技术标签:

【中文标题】在 codeigniter 中显示具有相同组名的多条记录【英文标题】:display multiple records with same group name in codeigniter 【发布时间】:2014-02-05 10:38:02 【问题描述】:

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

表:

+---+-------------+--------------+
|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> 

请帮助任何人...在此先感谢

【问题讨论】:

你能显示当前的输出是什么吗? 我已经用输出更新了问题 【参考方案1】:

也尝试不同的

  $this->db->distinct();

您放置查询的位置

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于在 codeigniter 中显示具有相同组名的多条记录的主要内容,如果未能解决你的问题,请参考以下文章

SQLite:更新具有顺序值的多行列

使用 PHP/CodeIgniter 从具有多对多关系的两个表中显示数据

在 codeigniter 中显示 2 个具有活动记录的表中的 3 个最新数据

具有限制和偏移量的 CodeIgniter sql 查询未显示结果

两个不同组中具有不同列值的记录数

为啥哎呀!在 codeigniter-4 中显示错误