#mysql #sql
таблица: m_frend дружит со sl_frend (в примере 883 дружит с 876), НО есть записи
в которых другие uid'ы дружат с m_frend (то есть в таком случае m_frend будет sl_frend'ом).
Пример 856 дружит с 883.
mysql> select * from frends ;
+---------+----------+-------+
| m_frend | sl_frend | fr_st |
+---------+----------+-------+
| 883 | 876 | 1 |
| 880 | 875 | 1 |
| 881 | 877 | 1 |
| 856 | 883 | 1 |
| 859 | 883 | 1 |
| 860 | 883 | 1 |
| 883 | 879 | 1 |
| 883 | 880 | 1 |
| 883 | 881 | 2 |
+---------+----------+-------+
9 rows in set (0.01 sec)
Нужно в одном запросе, ОДНИМ СТОЛБИКОМ, вытянуть всех друзей 883 (тех с кем дружит
883), и ТЕХ КТО ДРУЖИТ С 883.
Такой вот калмбурчик вышел, надеюсь продлему описал понятно. И реально ли это сделать
(получить результат в одном стобце)?
Знаю что можно сначала получить
mysql> select * from frends where m_frend=883 or sl_frend=883;
+---------+----------+-------+
| m_frend | sl_frend | fr_st |
+---------+----------+-------+
| 883 | 876 | 1 |
| 856 | 883 | 1 |
| 859 | 883 | 1 |
| 860 | 883 | 1 |
| 883 | 879 | 1 |
| 883 | 880 | 1 |
| 883 | 881 | 2 |
+---------+----------+-------+
7 rows in set (0.00 sec)
а потом в коде отбросить 883. но как результат запроса получить одним столбцом?
Я не знаю какой заголовок дать этому вопросу.
Ответы
Ответ 1
Для таких задач отлично подходит конструкция UNION. Запрос с ее использованием может иметь вот такой вид: SELECT sl_frend AS frend_id FROM frends WHERE m_frend = 883 UNION SELECT m_frend AS frend_id FROM frends WHERE sl_frend = 883; А вот и SQL Fiddle с рабочим примером.Ответ 2
Тут с одной стороны все понятно с UNION. Но посмотрите немного глубже. Структура таблиц не соответсвует принципам реляционных баз данных. Чем у Вас левый товарищ может отличаеться от правого? Они же совершенно равноправны. Тут лучше использовать такую структуру Люди (ИД) Отношение товарищества (ИД) Товарищи (ИД_Отношения_товарищества, ИД_Человека) Конечно, тут придется использовать цже не UNION, а JOIN.Ответ 3
select case m_frend when 883 then sl_frend else m_frend end as frend from frends where m_frend = 883 or sl_frend = 883
Комментариев нет:
Отправить комментарий