我有两个表(朋友和用户),我想获取所有用户的列表,但应该清楚的是,这是否是我的朋友,我的当前ID是“ 81”
ON
用户
Friends
id user_id friend_id
32 81 169
33 81 170
34 83 171
我尝试使用以下代码,但我只获得朋友列表中的用户,我想要的只是状态/结果是否为我的朋友
id first_name
81 byt
169 abc
170 def
171 xyz
答案 0 :(得分:1)
如果要在MySQL中完成所有操作,则必须运行以下查询:
SELECT u.id, NOT ISNULL(f.friend_id) as is_friend
FROM users u LEFT JOIN
(SELECT f.friend_id FROM friends f WHERE f.user_id = 81) f
ON u.id = f.friend_id
WHERE u.id != 81;
基本上,您将所有用户与特定id
的所有朋友的表连接在一起。然后检查friend_id
是否为null
(由于左联接行为)。
请参见here示例。
答案 1 :(得分:0)
$this->db->select('friends.user_id,friends.friend_id,users.first_name,users.last_name,users.image');
$this->db->from('friends');
$this->db->join('users', 'users.id=friends.friend_id');
如果您想让所有人都知道但知道哪些是您的朋友,那么您需要在php中进行处理。上面的查询将从两个表中检索所有信息。
现在进一步移动:
$result = $query->result_array();
foreach($result as $row){
if($row['user_id'] == $add_data['user_id']){
$friendsArray[] = $row['friend_id'];
}
}
这将使用与您的friend_ids
相匹配的user_id
创建一个新数组。基本上,您尝试在where子句中执行的逻辑是在php中完成的,因为您想检索所有这些逻辑。
如果要使用不在好友列表中的其余数据,则可以始终在foreach循环内使用else
语句。