Получить истинный ложный результат в MySQL PHP - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть две таблицы (друзья и пользователи), и я хочу получить список всех пользователей, но должно быть ясно, что, будь это мой друг или нет, мой текущий идентификатор "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']);

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если вы хотите сделать все это в 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 (из-за поведения левого соединения).

См. здесь пример.

0 голосов
/ 18 декабря 2018
$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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...