Codeigniter Правильный способ зацикливания соединений с несколькими результатами? - PullRequest
1 голос
/ 24 мая 2011

Я приведу небольшой пример, чтобы объяснить, что я имею в виду.

CREATE TABLE blog
(
 b_id int primary key not null,
  b_title varchar(255) not null,
  b_body text not null,
  CONSTRAINT pk_b_id_01 PRIMARY KEY(b_id)
 )

 CREATE TABLE images
 (
  i_id int primary key not null,
  i_image varchar(255) not null,
  i_b_id int not null,
  CONSTRAINT pk_i_id_01 PRIMARY KEY(i_id)
 )

Допустим, в административной области я хочу показать таблицу с каждой темой блога и всеми назначенными ему изображениями, независимо от того, имеет ли он 1 изображение или 5 изображений.

В настоящее время я делаю это так

$query = $this->db->get("blog");
foreach($query->result() as $qr)
{
    echo $qr->b_title . "<br />";
    $query2 = $this->db->get_where("images", array('i_b_id'=>$qr->b_id));
    foreach($query2->result() as $qr2)
    {
        echo $qr2->i_image . "<br />";
    }
    echo "<hr />\n";
}

Мой вопрос, есть ли способ сделать это с 1 запросом вместо потенциально 30 или сколько там постов?

Я пытался сделать это с помощью объединения, но показывалось только первое изображение.

$this->db->join("images", "i_b_id = b_id");
$query = $this->db->get("blog");
foreach($query->result() as $qr)
{
    echo $qr->b_title . "<br />";
    $query2 = $this->db->get_where("images", array('i_b_id'=>$qr->b_id));

    //is there another for loop i can do here?
    echo $qr->i_image . "<br />";

    echo "<hr />\n";
}

1 Ответ

0 голосов
/ 25 мая 2011

Выполнение объединения должно привести к дублированию данных блога для каждого изображения.Чтобы не показывать один и тот же заголовок снова и снова, просто используйте простую логику:

$current_blog_id = -1;
foreach($query->result() as $qr)
{
    // only output the title if it's a new blog
    if ($qr->b_id != $current_blog_id)
    {
        if ($current_blog_id != -1) echo "<hr />\n";

        echo $qr->b_title . "<br />";

        $current_blog_id = $qr->b_id;
    }

    echo $qr->i_image . "<br />";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...