Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу отсортировать данные, опираясь на другие таблицы 
:(
    Опции темы
pavelforever
  Дата 25.10.2014, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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?
PM MAIL   Вверх
tzirechnoy
Дата 25.10.2014, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Через self-join/group by/агрегат min(id).
PM MAIL   Вверх
Akina
Дата 25.10.2014, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



А теперь без примера чётко и точно сформулируйте, как именно сортировать. Чтобы на любом наборе данных сразу стало понятно, в каком порядке будут идти записи.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pavelforever
Дата 25.10.2014, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.10.2014

Репутация: нет
Всего: нет



Цитата(Akina @ 25.10.2014,  21:17)
А теперь без примера чётко и точно сформулируйте, как именно сортировать. Чтобы на любом наборе данных сразу стало понятно, в каком порядке будут идти записи.

Суть в первом пункте, подробности в остальных:

1. Нужно вывести обычно по id, но если у любой из выводимых компаний увидим общий телефон или мэйл с еще невыведенной компанией, выводим её.
2. Теперь ищем и у этой компании общий тел или мэйл с невыведенными, если находим выводим и повторяем процедуру уже с ней. 
3. Если не находим, возвращаемся на предыдущий шаг и ищем еще смежные предприятия. Если опять не находим общих, 
4. продолжаем вывод в обычном режиме по id, возвращаясь к первому условию.

Это сообщение отредактировал(а) pavelforever - 25.10.2014, 23:11
PM MAIL   Вверх
Akina
Дата 26.10.2014, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Я же сказал - точно. А это ”описание" даже порядок опорных записей не определяет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pavelforever
Дата 26.10.2014, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.10.2014

Репутация: нет
Всего: нет



Цитата(Akina @ 26.10.2014,  09:30)
Я же сказал - точно. А это ”описание" даже порядок опорных записей не определяет.

Приведите пример точной формулировки сложного запроса и я постараюсь сделать как надо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.