powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная сортировка
17 сообщений из 17, страница 1 из 1
Сложная сортировка
    #38787151
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько не пытался решить эту задачу сам, не получается
Итак, есть таблица компаний
компании companies
| ID | NAME |
|----|--------------------|
| 1 | Первая компания |
| 2 | Вторая компания |
| 3 | Третья компания |
| 4 | Четвертая компания |
| 5 | Пятая компания |

мэйлов emails (все мыла уникальны и могут принадлежать разным компаниям)
| ID | NAME |
|----|---------------------|
| 1 | first@fdsfjsfj.dfs |
| 2 | second@fdsfjsfj.dfs |
| 3 | third@fdsfjsfj.dfs |
| 4 | forth@fdsfjsfj.dfs |

телефоны 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?
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787313
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСколько не пытался решить эту задачу сам, не получаетсянаправьте на вашу мысль, покажите как вы пытались...
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787410
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещо тадобно уточнить...
если я вывел компанию 1 с мылом 1 и телефоном 1

у компании 2 телефон 1
а у компании 3 мыло 1

какая компания должна ити после первой? та где совпал только телефон, или та где только мыло?
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787411
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если 1000 компаний, у всех уникальные мылы и телефоны, вот они списком идут...

1001 телефон совпал с 100 компанией скажем...мы её тогда должны после сотой выдать...но её мыло (1001 компании ) совпадает с 999.

и вот вопрос 999 надо на 102 место ставить или нет?
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787414
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем делать вывод компаний по йади(а если не по айди а случайно...пользователь это както заметит?)


но если совпало мыло или телефон тулить следом...

вот идёт 1 компания, есть 300 компаний с такимже телефоном, их ставить после первой?

а на каждую из 300 есть ещо 100 компаний с совпавшим мылом...если их тоже следом выводить...в чом смысл тогда такого вывода?

мдя паша...незнаю что ты там пытался...но поидее былиб попытки..прежде всего бы понял что задача не сформулирована доконца
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787416
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в целом для такой ереси....

для простоты расмотрим список - айди, номер телефона

и вот нам надо по айди, но если совпадает телефон то следом...

получаем таблицу(подзапрос)
номер телефона, мин(айди)

потом клеим базовую таблицу ТБ с вотэтой псевдо ТП, связь по совпадению номера телефона

и получаем ещо один столбик для сортировки

ТП.айди_ИБ.айди

и вот сортируя по этому столбику, получим то что надо...
айди - номер телефона
1 1233
2 2233
3 1233
4 2233

ТП будет
1233 1
2233 2

клеим и строим новый стобки
1 1233 1_1
2 2233 2_2
3 1233 1_3
4 2233 2_4

сортируя по новому столбику получим то что надо
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787422
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453ещо тадобно уточнить...
если я вывел компанию 1 с мылом 1 и телефоном 1

у компании 2 телефон 1
а у компании 3 мыло 1

какая компания должна ити после первой? та где совпал только телефон, или та где только мыло?
В идеале та, где больше совпадений, если одно и там и там, то та, которая первая попалась, а вообще это неважно, главное, чтоб все смежные оказались рядом
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787423
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

я пытался найти способ, до кода так и не дошло. Был еще вариант при добавлении компаний находить общие и связывать отдельной таблицей, но пока его не рассматриваю. Думаю, как-то это можно сделать с помощью case или переменных (но они для меня пока темный лес).
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787424
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453а если 1000 компаний, у всех уникальные мылы и телефоны, вот они списком идут...

1001 телефон совпал с 100 компанией скажем...мы её тогда должны после сотой выдать...но её мыло (1001 компании ) совпадает с 999.

и вот вопрос 999 надо на 102 место ставить или нет?
да, после сотой, дальше проверяем ее на смежность, находим 999-ую и ставим её 102-ой, у этой 999-ой тоже ищем смежные, если не находим, идем по списку, находим - ставим 103-ей
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787427
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453а зачем делать вывод компаний по йади(а если не по айди а случайно...пользователь это както заметит?)


но если совпало мыло или телефон тулить следом...

вот идёт 1 компания, есть 300 компаний с такимже телефоном, их ставить после первой?

а на каждую из 300 есть ещо 100 компаний с совпавшим мылом...если их тоже следом выводить...в чом смысл тогда такого вывода?

мдя паша...незнаю что ты там пытался...но поидее былиб попытки..прежде всего бы понял что задача не сформулирована доконца

если не по id, то как? можно хоть по дате добавления если бы было поле, главное, чтоб каждый раз при обновлении страницы была одна и та же картина.

все предложения верны. смысл в том, чтоб смежные компании были рядом.. вряд ли их одинаковых будет так много
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787457
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453
и вот нам надо по айди, но если совпадает телефон то следом...

с помощью чего это лучше делать? case, if или есть что-то лучше?
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787574
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelforever,
вы итоговый запрос сделайте, а там будет видно как упорядочивать... Ваш запрос покажите....
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787731
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelforeveralex564657498765453а если 1000 компаний, у всех уникальные мылы и телефоны, вот они списком идут...

1001 телефон совпал с 100 компанией скажем...мы её тогда должны после сотой выдать...но её мыло (1001 компании ) совпадает с 999.

и вот вопрос 999 надо на 102 место ставить или нет?
да, после сотой, дальше проверяем ее на смежность, находим 999-ую и ставим её 102-ой, у этой 999-ой тоже ищем смежные, если не находим, идем по списку, находим - ставим 103-ей

ну вот это уже точно ересь!


расмотрим вкачестве записей в базу данных числа от 10 до 99

всё число это как бы айди записи - тоесть вывод по айди, - = вывод по порядку.

первая цифра это номер телефона, вторая мыло...

итак гуляем по вашей логике.

первая 10

дальше - нет компаний с цифрами 1 и 0.

есть 8 компаний с похожим мылом - 20 30 40 50 60 70 80 90

и есть 9 с совпавшим телефоном 11 12 13...

что ставим? допустим телефон важнее

значит 10 11, потом 12 13 19.... теперь уже с похожим телефоном нету есть с мылом похожим
29 39 49 ...

ставим 29, теперь есть куча с похожим телефоном 20 21 22 .... дойдём до 28, опять ставим
с похожим мылом - ....

короче ересь в чистом виде получаеться... а главное - процес явно циклический...

тоесть пока весь список по кокойто логике не отсортировали, продолжать...

если кто не предумает эвристику для такой сортировки...то задача явно не для субд.
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787761
pavelforever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понял вот этого в рассуждении
alex564657498765453первая цифра это номер телефона, вторая мыло...

дальше - нет компаний с цифрами 1 и 0.

а если сделать одно поле для объединения, такое возможно в sql? Т.е. аналогично тому, если бы отсортировать нужно было бы только по общему мэйлу..
...
Рейтинг: 0 / 0
Сложная сортировка
    #38787808
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelforever, да какая разница? у вас явно циклическая задача (запись результата номер N зависит от данных в записи результата номер N-1), ну так и делайте цикл:

1) выбрать первую запись (селект ... лимит 1) и сбросить её во временную таблицу;
2) выбрать очередную запись (селект ... где мыло похожее или телефон похожий (а если таких нет, то селект из п.1), и запись не была выбрана на предыдущих шагах - ... лимит 1);
3) повторять предыдущий пункт до исчерпания записей в исходной таблице или до достижения нужного объёма выборки.

Долго? да
Криво? да
Не одним запросом? да
Ну а чего вы хотели с такой постановкой?
...
Рейтинг: 0 / 0
Сложная сортировка
    #38788040
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelforeverне понял вот этого в рассуждении
alex564657498765453первая цифра это номер телефона, вторая мыло...

дальше - нет компаний с цифрами 1 и 0.

а если сделать одно поле для объединения, такое возможно в sql? Т.е. аналогично тому, если бы отсортировать нужно было бы только по общему мэйлу..


всёже елементарно ватсон

у нас таблица

номер телефона и мыло (щитай что это цифры от 0 до 9

айди(первичный ключ) мы стриом как пару телефон+мыло.

вот и получаем таблицу

10 1 0
11 1 1
айди телефон мыло

сортируем по айди.
первая запись
10 1 0

договорились что записи у нас до 99

ещо есть компании где телефон равен 1, а мыло 0???
нету(числа состоящего из цифр 1 и 0 между 11 и 99 нету

теперь для этой записи ищем покожие телефоны

11 1 1
есть запись с похожим и номером и мылом(число между 12 99 состоящее только из 1иц) нету

дальше
12 1 2
...
19 1 9
больше нету компаний с похожим телефоном(первая 1 среди чисел 20 -99)

но есть компании с похожим мыло(заканчиваеться на 9)

первая
29 2 9

но теперь есть с похожим телефоном(первая 2) а мы условились что телефон важнее

20 2 0
21 2 1
...
Рейтинг: 0 / 0
Сложная сортировка
    #38788070
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя пример чисел показывает наглядно, как получиться итоговая сортировка

а именно

10
11
12
..
19
29
20
..
28
38
30
..37
39
49
40
..
48

то тут уже задача упрощаеться... придумать ересь, которая выведет числа вот в такой закономерности

продолжая предыдущую идею


получим таблицу мин_айди_для_телефона+реальный_айдизаписи

мы отсортируем с привязками по телефону.

терь надо мыло приркутить както...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная сортировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]