从CodeIgniter中的两个表中检索数据

时间:2015-11-26 01:13:49

标签: php mysql codeigniter

我想显示一些类别及其成员数据,如下所示:

水果

  • 葡萄
  • 苹果

动物

但我得到的是这样的:

水果

水果

  • 葡萄

水果

  • 苹果

动物

动物

动物

这就是我所做的。在category_model中:

function getCategoryMembers(){
   $this->db->join('members','members.category_id=categories.id','left');
   return $this->db->get('categories')->result();
}

在控制器中,我传递成员和类别数据。

$data['members'] = $this->category_model->getCategoryMembers();

而且,在我看来,我是这样写的。

<?php foreach ($members as $m) : // list the members ?>
    <?php echo $m->category_name ?>
   <?php echo $m->member_name ?>
<?php endforeach; ?>

请告诉我如何显示我想要的数据。我怀疑我必须修改模型中的数据库查询,以及我如何循环它,但我不知道如何。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

ON join您将只从数据库中获取一行,因此请更改您的查询,

SELECT categories.id, GROUP_CONCAT(members.member_name SEPARATOR ', ') as mem
FROM categories 
LEFT JOIN members on members.category_id = categories.id
GROUP BY categories.id

所以成员将以逗号(,)分隔值

现在在视野中

<?php foreach ($members as $m) : // list the members ?>
     <?php echo $m->category_name ?>
     <?php $a = explode(",",$row->mem);
        foreach($a as $b) {
           echo $b;
        }
     ?>
 <?php endforeach; ?>

希望这会有所帮助。(我不确定列名,请确保交叉检查并使用它。)

答案 1 :(得分:1)

我认为您需要修改模型的输出。 在控制器中尝试这个(只需修改列):

$rec = $this->category_model->getCategoryMembers();
$new_rec = array();
foreach ($rec as $k => $v) {
    $new_rec[$v->category][] = $v->member;
}
$data['members'] = $new_rec;

对于观点:

<?foreach ($members as $k => $v):?>
  <h3><?php echo $k ?></h3>
    <?if($v):?>
        <?foreach ($v as $m):?>
            <p><?=$m?></p>
        <?endforeach;?>
    <?endif;?>
<?endforeach;?>

答案 2 :(得分:0)

<?php foreach ($members as $m) : // list the members ?>
     <?php echo $m->category_name; ?>
     <?php foreach ($m->member_name as $n) : // list the names ?>
         <?php echo $n; ?>
     <?php endforeach; ?>
<?php endforeach; ?>

这样的东西?