php中得到true-false结果

nfeuvbwi  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(345)

我有两个表(朋友和用户),我想得到所有用户的名单,但应该有明确的,无论是我的朋友与否,我目前的id是“81”

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

我尝试了下面的代码,但我得到的用户只有谁在我的朋友名单,我想所有,但与状态/结果,这是我的朋友或不是

$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');
$this->db->where('friends.user_id', $add_data['user_id']);
zhte4eai

zhte4eai1#

$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中做的,因为你想检索所有的逻辑。
如果你想使用不在好友列表中的剩余数据,你可以使用 else foreach循环中的语句。

np8igboo

np8igboo2#

如果您想在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_idnull (由于左连接行为)。
这里有一个例子。

相关问题