Ограничительный запрос не работает в codeigniter при использовании цикла foreach - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь ограничить результат для разбивки на страницы в цикле foreach с помощью следующего запроса, но вместо ограничения я получаю все результаты с помощью следующего запроса.

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->where("id", $snippet_id);
        $this->db->select('*');
        $this->db->from('snippets');
        $this->db->limit($limit, $start);
        $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;
}

Обновлено

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Ваш подход к вашей базе данных с помощью цикла foreach неверен.Правильный подход будет использовать соединение в запросе:

из вашей функции getDataOneColumn() вы используете только значения snippet_id, которые вы можете использовать для создания объединения:

public function getDataOneColumn($table, $col1_name, $col1_value, $limit, $start)
{
    $this->db->select("t1.*,t2.*")
             ->where("t1.$col1_name", $col1_value)
             ->join("snippets t2","t1.snippet_id=t2.id")
             ->limit($limit, $start);

    $query = $this->db->get("$table t1");
    $result = $query->result();

    return $result;
}

примечание: в вашем примере $tag_id=$col1_value, поэтому используйте любое имя переменной, которое подходит лучше.

Ваша вторая функция get_tags() тогда вообще не нужна.

0 голосов
/ 23 сентября 2019

Надеюсь, это поможет вам

public function get_tags($params = array(), $tag_id)
{   $result = array();
    $snippetstagdata = $this->getDataOneColumn("snippets_tags","tag_id",$tag_id);
    foreach ($snippetstagdata as $data) {
                $this->db->where('id',$data['snippet_id']);
        if(isset($params) && !empty($params))
        {
            $this->db->limit($params['limit'], $params['offset']);
        }
        $result[$data['snippet_id']] = $this->db->get('snippets')->result_array();
    }
    return $result;
}

и

public function getDataOneColumn($table, $col1_name, $col1_value)
{
    return $this->db->get_where($table,array($col1_name=>$col1_value))->result_array();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...