在MySQL PHP中获得True错误结果

时间:2018-12-18 09:03:37

标签: php mysql codeigniter

我有两个表(朋友和用户),我想获取所有用户的列表,但应该清楚的是,这是否是我的朋友,我的当前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         

2 个答案:

答案 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语句。