【问题标题】:Query return empty when Left Join table is empty in codeigniter当 Codeigniter 中的 Left Join 表为空时,查询返回空
【发布时间】:2016-08-02 11:54:11
【问题描述】:

我在 MySql 7.5 中使用 Codeigniter。我有一个查询,当左连接表为空时它总是返回空。

$this->db->select('shop.id as shop_id, shop.shop_name, rg.rating');
$this->db->from('shop');            
$this->db->join('booking as bh', 'bh.shop_id = shop.id', 'left');
$this->db->join('rating rg', 'rg.booking_id = bh.id', 'left');
$this->db->group_by("bh.id");
$this->db->order_by("bh.id", "desc");

在这里,我在预订表和商店表中有条目,但评级表为空。但我没有得到任何结果。

如果我从选择中删除rg.rating,它将返回正确的结果。

我错过了什么吗?谢谢

【问题讨论】:

  • 我不知道 CodeIgniter,但从您的查询来看,我认为您使用 group by 的方式似乎是错误的
  • 谢谢,但即使我删除 group_by 也没有得到结果
  • 我怀疑是您的 group by 导致了空结果集。您正在对可能不存在的结果进行分组。您也没有在 select 语句中包括按列分组。我的建议是打开 Profiler 并查看实际查询的样子。
  • @RaGu 这个字段是否正确'rg.booking_id = bh.id' ?? bh.id
  • 您将 group_by 与左连接表一起使用,因此您没有得到任何结果

标签: php mysql codeigniter


【解决方案1】:

试试这个-

$this->db->select('shop.id as shop_id, shop.shop_name, rating.rating');
$this->db->join('booking', 'booking.shop_id = shop.id', 'left');
$this->db->join('rating', 'rating.booking_id = booking.id', 'left');
$this->db->group_by("booking.id");
$this->db->order_by("booking.id", "desc");
return $this->db->get('shop');

【讨论】:

  • 所有你需要正确应用'group by'。@Ragu
【解决方案2】:
$this->db->select('s.id as shop_id, s.shop_name, r.rating');

$this->db->from('shop s');            

$this->db->join('booking bh', 'bh.shop_id = shop.id');

$this->db->join('rating r', 'r.booking_id = bh.id');

$this->db->group_by("bh.id");

$this->db->order_by("bh.id", "desc");

   $qry =  $this->db->get();

   echo $this->db->last_query();

   print_r($qry->result_array()); exit;

回复您的输出。同时更改 config/database.php

'db_debug' => TRUE

【讨论】:

  • 没有。我得到了空结果
猜你喜欢
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多