【问题标题】:Mysql return empty matchs in JOIN as nullMysql将JOIN中的空匹配返回为null
【发布时间】:2012-05-28 18:29:16
【问题描述】:

我有这些表

cat(保存类别的主要数据)id_cat, original name
cat_lang(保存不同语言的猫详细信息)lang, id_cat,local_name
cat_media(保存 cat 媒体)id_cat、id_media、usage(可能有 base 或 big)
media(保存图片信息)id_media、name、path

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

$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

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

【问题讨论】:

  • @Kristian Antonsen,感谢您的更正

标签: php mysql codeigniter join


【解决方案1】:

使用left outer join 而不是简单的join

【讨论】:

  • 我使用了左外层,它可以工作,但缺少一件事:id_cat 空了,其余的都可以。是什么原因造成的?
  • 您的查询中有多个id_cat。确保您使用cat.id_cat
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2013-04-26
    相关资源
    最近更新 更多