用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3192|回复: 5
收起左侧

[讨论/交流] 如何用FOR或WHILE遍历数据库啊

[复制链接]
发表于 2011-7-14 15:44:03 | 显示全部楼层 |阅读模式
本帖最后由 黑鹰 于 2011-7-14 16:18 编辑

手册上用的是FOREACH。
如何用FOR或WHILE遍历数据库呢,我发现用FOREACH递归时只能读出一层,不知道是不是因为没有movenext的原因。

$data=$this->db->query('select * from news');
foreach($data->result() as $row)

如何改成FOR  或WHILE来循环啊。
发表于 2011-7-14 16:19:10 | 显示全部楼层
foreach是自动的读的
用for跟while也一样,只不过你要count总的记录数,然后从1到count进行循环遍历
 楼主| 发表于 2011-7-14 16:32:20 | 显示全部楼层
但不知道该怎么读取 这个内容。
                for($i=0;$i<count($data->result());$i++){
                        echo $data->result()['newsid'];
                }
发表于 2011-7-14 16:38:05 | 显示全部楼层
黑鹰 发表于 2011-7-14 16:32
但不知道该怎么读取 这个内容。
                for($i=0;$iresult());$i++){
                        echo $data->result()['newsid'];

认真看手册啊
如果传入的参数超出行索引,则返回第一行(索引为0)数据

除此以外, 我们还可以使用下面的方法通过游标的方式获取记录:

$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()

默认情况下他们将返回一个 object,同时你也可以传递参数 "array" 以便使用 array 的方式获取数据

$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')


那么你就可以使用while($row = $query->next_row()){}来操作了
 楼主| 发表于 2011-7-14 17:18:29 | 显示全部楼层
本帖最后由 黑鹰 于 2011-7-14 17:19 编辑

哦,其实我想用递归,但foreach好象不用游标movenext就不向下走了。只会得到第一行数据。
        function index($id,$b,$list){
                $b=$b+1;
                $data=$this->db->query('select * from lm_info_class where info_cla_id='.$id);
                foreach($data->result() as $row){
                        $list=$list.'<option value='.$row->info_class_id.'>└'.$row->info_class_title.'</option>';
                        return $this->index($row->info_class_id,$b,$list);
                }
                return $list;


单独的环境用FOR或WHILE循环
return $this->index($row->info_class_id,$b,$list);
$rs->movenext;
可以递归所有层出来。
头像被屏蔽
发表于 2011-7-14 18:29:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

本版积分规则