За последние 24 часа нас посетили 17957 программистов и 1600 роботов. Сейчас ищет 951 программист ...

Связь многие к одному

Тема в разделе "MySQL", создана пользователем abler98, 31 авг 2014.

  1. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    Есть таблица users:
    id, name
    И таблица messages:
    id, user_id, rec_id, message
    Где:
    user_id - отправитель
    rec_id - получатель

    Мне нужно получить id всех пользователей с которыми вел переписку пользователей с id = 1 :)
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем приписывать _id если ежу понятно, что это id =) забей
    Код (Text):
    1. И таблица messages:
    2. id, from, to, sent, text
    OR - или.

    WHERE `from` = 1 OR `to` = 1
     
  3. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    А как это реализовать через OR? :)
    Вот мой вариант SELECT * FROM users WHERE id IN (SELECT CONCAT_WS(from, to) as id FROM messages WHERE from = МОЙ_ID OR to = МОЙ_ИД) ORDER BY id DESC;
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что это?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Код (PHP):
    1. SELECT u.*
    2. FROM
    3.   users AS u INNER JOIN
    4.   (
    5.     SELECT from_id AS id FROM messages WHERE to_id=1
    6.     UNION
    7.     SELECT to_id AS id FROM messages WHERE from_id=1
    8.   ) AS m ON m.id=u.id
    UNION в отличие от WHERE … OR … позволяет серверу БД использовать индексы (там где они есть).

    алсо, после получения выборки, UNION в отличие от WHERE … OR … или UNION ALL добивается уникальности результата, что нам будет кстати!