Как осуществить корректный запрос к базе данных?

Доброе время суток,
Тут возникла такая ситуация:
Есть таблица Company:
CREATE TABLE IF NOT EXISTS `company` (
  `company_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Есть таблица, которая проставляет соответствие между компаниями, типа: Компания 1 относится к компании 2 по таким-то критериям.

CREATE TABLE IF NOT EXISTS `company_relation` (
  `company1_id` int(10) unsigned NOT NULL,
  `company2_id` int(10) unsigned NOT NULL,
  `mark` float(8,4) NOT NULL
  KEY `company1_stock_correlation` (`company1_id`),
  KEY `company2_stock_correlation` (`company2_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Соответственно мне нужно получить список всех компаний которые соотносятся к указанной мною компанией, но есть не большая особенность в заполнении данных, ниже приведен пример записей в таблице company_relation для трех компаний:

ef2744569f3b464f97b7f88fa75293fc.png
Как вы могли заметить, что записи где company1_id = 3 нет, потому что она ставиться в соответствие для других компаний выше.

Мое решение представлено ниже, но проблема в том, что соответствующие компании для нужной мне компании (company_id) могут быть в разных столбцах (company1_id или company2_id). Можно ли просто получить список соответствующих компаний в одном столбце? Иначе придется кучу проверок сверху накручивать.
select * from `company` 
    inner join `stock_correlation` 
        on `company`.`company_id` = `stock_correlation`.`company1_id` 
            or `company`.`company_id` = `stock_correlation`.`company2_id` 
    where `company_id` = ? #где company_id - уникальный идентификатор компании для которой мы ищем соответствия


P.S. В результате хотелось бы получить просто список компаний (идентификатор и название), которые соответствовали моей компании. Неужели придется 2-мя запросами делать?
  • Вопрос задан
  • 2376 просмотров
Пригласить эксперта
Ответы на вопрос 2
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
надо добавлять двухсторонную связь т.е. 2 записи для связи компании типа 1компании ко 2компании и 2компания к 1компании, тогда одним запросом можно будет выбрать
Ответ написан
Fadmin
@Fadmin
Если нужен один столбец, сначала выберите все по company1_id потом по company2_id, соединить можно через union.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы