![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
pavelforever |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 25.10.2014 Репутация: нет Всего: нет |
Сколько не пытался решить эту задачу сам, не получается
Итак, есть таблица компаний компании companies | ID | NAME | |----|--------------------| | 1 | Первая компания | | 2 | Вторая компания | | 3 | Третья компания | | 4 | Четвертая компания | | 5 | Пятая компания | мэйлов emails (все мыла уникальны и могут принадлежать разным компаниям) | ID | NAME | |----|---------------------| | 1 | [email protected] | | 2 | [email protected] | | 3 | [email protected] | | 4 | [email protected] | телефоны phones (все телефоны уникальны и могут принадлежать разным компаниям) | ID | NAME | |----|---------------------| | 1 | +79780000000| | 2 | +79781111111 | | 3 | +79781111222 | | 4 | +79783333333 | связывающая таблица companies_emails | COMPANY_ID | EMAIL_ID | |------------|----------| | 1 | 1 | | 1 | 2 | | 2 | 3 | | 2 | 4 | | 3 | 1 | таблица связывает компании и телефоны companies_phones | COMPANY_ID | PHONE_ID | |------------|----------| | 1 | 1 | | 2 | 2 | | 5 | 2 | Как видно, первая и третья компании имеют один общий мэйл, вторая и пятая - общий телефон. Нужно, чтоб компании выводились обычно по Id, но если мы в процессе вывода видим, что у какой-то из компаний есть общий телефон или мэйл с другой компанией(это мы определяем таблицами companies_emails и companies_phones), выводим сначала её или их, если их несколько. То есть в нашем случае выводим первую компанию, смотрим в таблицы companies_emails и companies_phones, и обнаруживаем, что у этой компании есть "родственная" Третья компания - выводим её (если бы у нее были тоже общие телефоны и эмэйлы с еще невыведенными компаниями, нужно было бы вывести и их). Теперь возвращаемся и выводим вторую компанию, видим, что у нее общий телефон с пятой, выводим пятую, возвращаемся и наконец Четвертую. Как это реализовать в sql? |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Через self-join/group by/агрегат min(id).
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А теперь без примера чётко и точно сформулируйте, как именно сортировать. Чтобы на любом наборе данных сразу стало понятно, в каком порядке будут идти записи.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
pavelforever |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 25.10.2014 Репутация: нет Всего: нет |
Суть в первом пункте, подробности в остальных: 1. Нужно вывести обычно по id, но если у любой из выводимых компаний увидим общий телефон или мэйл с еще невыведенной компанией, выводим её. 2. Теперь ищем и у этой компании общий тел или мэйл с невыведенными, если находим выводим и повторяем процедуру уже с ней. 3. Если не находим, возвращаемся на предыдущий шаг и ищем еще смежные предприятия. Если опять не находим общих, 4. продолжаем вывод в обычном режиме по id, возвращаясь к первому условию. Это сообщение отредактировал(а) pavelforever - 25.10.2014, 23:11 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Я же сказал - точно. А это ”описание" даже порядок опорных записей не определяет.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
pavelforever |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 25.10.2014 Репутация: нет Всего: нет |
Приведите пример точной формулировки сложного запроса и я постараюсь сделать как надо |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |