Как убрать из sql-запроса ячейки, содержащие определённое значение?

Рейтинг: 1Ответов: 1Опубликовано: 12.09.2014

Всем привет!

Реализую список вывода друзей на сайте.

Таблица в БД такая:

|  id   |  user_one | user_two | status |
   1        44          45          1

В итоге я зaхожу под своим логином с id = 44, и sql
Запрос получает все строки, где встречается 44:

user_one = 44 OR user_two = 44

Проблема в том, что 44 может быть как в первой, так и во второй колонке.

Соответственно вопрос: как мне правильно составить запрос, чтобы возвращалась только 1 ячейка, которая была бы не равна 44?

Ответы

▲ 2Принят

Вариант номер раз:

SELECT 
  (CASE WHEN `user_one` = 44  THEN `user_two` ELSE `user_one` END) AS `friend`
FROM 
  `friends` 
WHERE `user_one` = 44 OR `user_two` = 44;

Вариант номер два (при наличии индексов будет работать очень быстро):

SELECT `user_one` AS `friend`
FROM `friends` 
WHERE `user_two` = 44
  UNION ALL    
SELECT `user_two` AS `friend`
FROM `friends` 
WHERE `user_one` = 44;

Вариант три - зеркалить записи:

44 | 45 | 1
45 | 44 | 1

P.S. Зачем вам поле id? Пара(user_one, user_two) - уникальна, и можно её сделать ключом, а id убрать. Кстати, в любом случае вам желательно сделать эту пару уникальным ключиком. Тогда проще будет добавлять или апдейтить записи, не опасаясь дубликатов.