Mysql在JOIN中返回空匹配为null

时间:2012-05-28 18:29:16

标签: php mysql codeigniter join

我有这些表

  

cat (保存类别的主要数据)id_cat,原始名称
   cat_lang (以不同语言保存cat详细信息)lang,id_cat,local_name
   cat_media (持有cat媒体)id_cat,id_media,用法(可能有基数或大)
  媒体(保存图片信息)id_media,名称,路径

我做了一个查询,返回所选类别的子类别。

$this->db->select('*')
         ->from('cat')
         ->join('cat_lang','cat.id_cat = cat_lang.id_cat','left outer')
         ->join('cat_media','cat.id_cat= cat_media.id_cat','left outer')             
         ->join('media','cat_media.id_media=media.id_media','left outer')
         ->where('cat.id_parent',$id_cat) //comes from function             
         ->where('cat_lang.lang',$lang)
$query = $this->db->get();

我会用以下方法过滤大图像:

  $sub_cats = $query->result_array(); 
  $data['sub_cats']= array();
  foreach($sub_cats as $key => $value)
  {
    if($value['usage'] == 'base' OR $value['usage'] == null)
    $data['sub_cats'][] = $value;
  }

$value['usage'] == null是麻烦开始的地方。问题出在某些类别中,没有附加基本图像,上面的查询不返回此类别,因为它在cat.id_cat= cat_media.id_cat条件下不匹配。

我想进入结果表:

id_cat:1 , ..., id_media = 2, usage=big
id_cat:2 , ..., id_media = null, usage=null

所以我在结果表中需要它们为null。我怎样才能做到这一点?在这里叠了好几个小时。谢谢你的帮助..

2 个答案:

答案 0 :(得分:0)

使用left outer join代替简单的join

答案 1 :(得分:0)

我意识到我正在尝试一些不可能的事情。 试图获取附有图像的类别,同时也询问哪些图像也没有附加图像。我确保在创建类别时我现在附加了一个默认的无预览图像,现在查询完成了这项工作。谢谢你的回答。