Mysql 如何使用codeigniter连接3个表,而表中没有任何空值?
我的查询是Mysql 如何使用codeigniter连接3个表,而表中没有任何空值?,mysql,sql,codeigniter,Mysql,Sql,Codeigniter,我的查询是 $this->db->select('*'); $this->db->from('private_messages'); $this->db->join('admin', 'admin.admin_id = private_messages.from_id', 'left'); $this->db->join('user', 'user.user_id = pri
$this->db->select('*');
$this->db->from('private_messages');
$this->db->join('admin', 'admin.admin_id = private_messages.from_id', 'left');
$this->db->join('user', 'user.user_id = private_messages.from_id', 'left');
$this->db->where('private_messages.hash_id',$id);
$this->db->order_by('private_messages.time_sent','asc');
$query=$this->db->get();
return $query->result_array();
输出为:
form_id | Username | Username
21 |Praveen |NULL
21 |Praveen |NULL
3 |NULL |admin
3 |NULL |admin
因此,请帮助删除所有空值并将用户名放在一列中。您从
admin
和user
表中获得空值,因为您使用的是左联接
如果左联接中的ON或USING部分中没有右表的匹配行,则右表将使用所有列都设置为NULL的行。您可以使用此事实查找表中没有对应项的行
例如,这一行:
$this->db->join('admin', 'admin.admin_id = private_messages.from_id', 'left');
应该是这样的:
$this->db->join('admin', 'admin.admin_id = private_messages.from_id');
阅读有关CodeIgniter活动记录和加入的更多信息: 有关MySQL连接的更多信息,请参见:
更新
“我希望用户名显示在单列中,并显示与消息\u id匹配的用户名。是否可能?” 是的,是这样的:
$this->db->select('*');
$this->db->from('private_messages');
$this->db->join('user', 'user.user_id = private_messages.from_id');
$this->db->where('private_messages.hash_id',$id);
$this->db->order_by('private_messages.time_sent','asc');
$query=$this->db->get();
return $query->result_array();
谢谢..但当我删除左侧时,它只显示管理员详细信息。。!如果您删除left,它将显示每个表中具有匹配值的行-因此,如果您为管理员删除它,它将只显示每个消息具有正确管理员id的行,如果您为用户删除它,它将只显示消息id中具有现有用户的行,如果您同时为管理员和用户删除,它将只显示同时具有管理员ID和用户ID的行。您需要哪一个?我希望用户名在单列中,并显示用户名与消息_id匹配。是否可能?是。。这是一个简单的连接查询,只用于连接用户表。我想使用3表。将用户和管理员用户名合并到一列中。这些用户名不一样吗?管理员不也是用户吗?