如何使用foreach循环从数据库中获取数据?

时间:2019-09-22 02:58:45

标签: php mysql codeigniter codeigniter-3 codeigniter-2

我正在尝试使用带有以下查询的foreach循环从CodeIgniter中的数据库中获取数据,但我仅获得了最后一个结果。

public function get_tags($limit, $start, $tag_id)
{    

    $snippetstagdata = $this->getDataOneColumn("snippets_tags","tag_id",$tag_id);

    foreach ($snippetstagdata as $getSnippet) {
        $snippet_id = $getSnippet->snippet_id;
        $this->db->limit($limit, $start);
        $this->db->select('*');
        $this->db->from('snippets');
        $this->db->where("id", $snippet_id);
        //$this->db->like('snippet_tags',$query);
        $query = $this->db->get();

    }

    $result = $query->result();

    $this->db->save_queries = false;

    return $result;
}

getDataOneColumn函数是

public function getDataOneColumn($table, $col1_name, $col1_value)
{
    $this->db->where("$col1_name", $col1_value);
    $query = $this->db->get("$table");
    $result = $query->result();
    $this->db->save_queries = false;

    return $result;
}

3 个答案:

答案 0 :(得分:0)

这是不正确的:

foreach ($snippetstagdata as $getSnippet) {
    $snippet_id = $getSnippet->snippet_id;
    $this->db->limit($limit, $start);
    $this->db->select('*');
    $this->db->from('snippets');
    $this->db->where("id", $snippet_id);
    //$this->db->like('snippet_tags',$query);
    $query = $this->db->get();

}

$result = $query->result();

您正在遍历数据中的每个项目,每次都重置$query,但是当您退出循环时,仅使用$query一次。

您需要移动此行:

$result = $query->result();

在循环内部获取正确的输出。

编辑:

如前所述,这也不是100%。 $ result应该是一个数组,并且在循环内部应将查询按如下方式推入数组:

$result[] = $query->result();

然后可以单独循环遍历最后一个数组($ result)。

答案 1 :(得分:0)

就像@steve一样,每次运行循环时,您都将替换$ query-> result()。因此,首先您需要创建一个关联数组来处理此问题。因此您的代码应为:

$data = array();
foreach ($snippetstagdata as $getSnippet) {
    $snippet_id = $getSnippet->snippet_id;
    $this->db->limit($limit, $start);
    $this->db->select('*');
    $this->db->from('snippets');
    $this->db->where("id", $snippet_id);
    //$this->db->like('snippet_tags',$query);
    $query = $this->db->get(); 
    $result = $query->result();
    $data[$snippet_id][] = $result;

}

然后,您可以从$ data数组中获取所有内容。 希望有帮助

答案 2 :(得分:0)

您应该尝试一下

public function get_tags($limit, $start, $tag_id) {

        $snippetstagdata = $this->getDataOneColumn("snippets_tags", "tag_id", $tag_id);

        $review = [];
        foreach ($snippetstagdata as $getSnippet) {
            $snippet_id = $getSnippet->snippet_id;
            $this->db->limit($limit, $start);
            $this->db->select('*');
            $this->db->from('snippets');
            $this->db->where("id", $snippet_id);
            //$this->db->like('snippet_tags',$query);
            $query = $this->db->get();
            $result[] = $query->result();
        }       
        $this->db->save_queries = false;
        return $result;
    }