Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用codeigniter连接3个表,而表中没有任何空值?_Mysql_Sql_Codeigniter - Fatal编程技术网

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表。将用户和管理员用户名合并到一列中。这些用户名不一样吗?管理员不也是用户吗?