#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
Комментариев нет:
Отправить комментарий