我最近一直试图加强我的查询技巧,为此,我决定制作一个简单的推特克隆。我有两张桌子,我想加入。
用户表
User_ID Pimary键
名
电子邮件
等...
关注表(对于以下用户)
ID Pimary Key
FK_Follower(User_ID的外键)UNIQUE
FK_Followie(User_ID的外键)UNIQUE
我的逻辑是每行必须有一个唯一的对,例如(16,18 | 18,16 | 14,13),每当用户请求关注时,如果该行已经存在,我将其删除。这允许类似布尔的功能。
我正在为用户关注者创建一个视图(您转到用户页面并单击查看关注者,它会显示谁在关注他们)
自然,为了实现这一点,我知道我需要在User表和Follow表之间使用连接。我使用codeigniter进行查询构建,但对于拥有sql知识的人来说,结构非常容易告诉我发生了什么,所以看起来像这样
$this->db->select('*');
$this->db->from('follow');
$this->db->where('follow.FK_Followie_ID', $id);// look for all rows where someone follows the user $id value passed to this function
$this->db->join('users', 'users.User_ID = follow.FK_Follower_ID' ,'right');
$query = $this->db->get();
return $query->result_array();
在我看来,我然后调用我需要的行值并显示它们(对于全局订阅源,特定的配置文件订阅源和单个订阅源,请执行此操作因此我知道它在我的视图逻辑中没有任何内容)
使用Right join是我显示结果的唯一方法,但是它们是错误的。我很肯定我正在向查询发送与正在使用的配置文件页面相关的正确$ id值,但我已经尝试了在阳光下的每个连接组合,并且它只显示结果,它们肯定是不对的。
我能完成我想做的事吗?这可能是我的表格结构的问题吗?或者它只是我的查询逻辑?我觉得我的加入知识存在差距,如果有人能够如此善意地开导我,我需要解决这个问题。谢谢。
答案 0 :(得分:0)
试试这个
$this->db->select('*');
$this->db->from('follow');
$this->db->join('users', 'users.User_ID = follow.FK_Follower_ID' ,'right');
$this->db->where('follow.FK_Followie_ID', $id);
$query = $this->db->get();
return $query->result_array();