|
|
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
Сколько не пытался решить эту задачу сам, не получается Итак, есть таблица компаний компании 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 07:02:10 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
авторСколько не пытался решить эту задачу сам, не получаетсянаправьте на вашу мысль, покажите как вы пытались... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 20:00:23 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
ещо тадобно уточнить... если я вывел компанию 1 с мылом 1 и телефоном 1 у компании 2 телефон 1 а у компании 3 мыло 1 какая компания должна ити после первой? та где совпал только телефон, или та где только мыло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:13:38 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
а если 1000 компаний, у всех уникальные мылы и телефоны, вот они списком идут... 1001 телефон совпал с 100 компанией скажем...мы её тогда должны после сотой выдать...но её мыло (1001 компании ) совпадает с 999. и вот вопрос 999 надо на 102 место ставить или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:16:06 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
а зачем делать вывод компаний по йади(а если не по айди а случайно...пользователь это както заметит?) но если совпало мыло или телефон тулить следом... вот идёт 1 компания, есть 300 компаний с такимже телефоном, их ставить после первой? а на каждую из 300 есть ещо 100 компаний с совпавшим мылом...если их тоже следом выводить...в чом смысл тогда такого вывода? мдя паша...незнаю что ты там пытался...но поидее былиб попытки..прежде всего бы понял что задача не сформулирована доконца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:20:25 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
а в целом для такой ереси.... для простоты расмотрим список - айди, номер телефона и вот нам надо по айди, но если совпадает телефон то следом... получаем таблицу(подзапрос) номер телефона, мин(айди) потом клеим базовую таблицу ТБ с вотэтой псевдо ТП, связь по совпадению номера телефона и получаем ещо один столбик для сортировки ТП.айди_ИБ.айди и вот сортируя по этому столбику, получим то что надо... айди - номер телефона 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 сортируя по новому столбику получим то что надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:28:12 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
alex564657498765453ещо тадобно уточнить... если я вывел компанию 1 с мылом 1 и телефоном 1 у компании 2 телефон 1 а у компании 3 мыло 1 какая компания должна ити после первой? та где совпал только телефон, или та где только мыло? В идеале та, где больше совпадений, если одно и там и там, то та, которая первая попалась, а вообще это неважно, главное, чтоб все смежные оказались рядом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:47:25 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov, я пытался найти способ, до кода так и не дошло. Был еще вариант при добавлении компаний находить общие и связывать отдельной таблицей, но пока его не рассматриваю. Думаю, как-то это можно сделать с помощью case или переменных (но они для меня пока темный лес). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:48:45 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а если 1000 компаний, у всех уникальные мылы и телефоны, вот они списком идут... 1001 телефон совпал с 100 компанией скажем...мы её тогда должны после сотой выдать...но её мыло (1001 компании ) совпадает с 999. и вот вопрос 999 надо на 102 место ставить или нет? да, после сотой, дальше проверяем ее на смежность, находим 999-ую и ставим её 102-ой, у этой 999-ой тоже ищем смежные, если не находим, идем по списку, находим - ставим 103-ей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:52:37 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а зачем делать вывод компаний по йади(а если не по айди а случайно...пользователь это както заметит?) но если совпало мыло или телефон тулить следом... вот идёт 1 компания, есть 300 компаний с такимже телефоном, их ставить после первой? а на каждую из 300 есть ещо 100 компаний с совпавшим мылом...если их тоже следом выводить...в чом смысл тогда такого вывода? мдя паша...незнаю что ты там пытался...но поидее былиб попытки..прежде всего бы понял что задача не сформулирована доконца если не по id, то как? можно хоть по дате добавления если бы было поле, главное, чтоб каждый раз при обновлении страницы была одна и та же картина. все предложения верны. смысл в том, чтоб смежные компании были рядом.. вряд ли их одинаковых будет так много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:57:51 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 и вот нам надо по айди, но если совпадает телефон то следом... с помощью чего это лучше делать? case, if или есть что-то лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 03:59:12 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
pavelforever, вы итоговый запрос сделайте, а там будет видно как упорядочивать... Ваш запрос покажите.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 14:34:18 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
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, опять ставим с похожим мылом - .... короче ересь в чистом виде получаеться... а главное - процес явно циклический... тоесть пока весь список по кокойто логике не отсортировали, продолжать... если кто не предумает эвристику для такой сортировки...то задача явно не для субд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 21:29:06 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
не понял вот этого в рассуждении alex564657498765453первая цифра это номер телефона, вторая мыло... дальше - нет компаний с цифрами 1 и 0. а если сделать одно поле для объединения, такое возможно в sql? Т.е. аналогично тому, если бы отсортировать нужно было бы только по общему мэйлу.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 23:33:15 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
pavelforever, да какая разница? у вас явно циклическая задача (запись результата номер N зависит от данных в записи результата номер N-1), ну так и делайте цикл: 1) выбрать первую запись (селект ... лимит 1) и сбросить её во временную таблицу; 2) выбрать очередную запись (селект ... где мыло похожее или телефон похожий (а если таких нет, то селект из п.1), и запись не была выбрана на предыдущих шагах - ... лимит 1); 3) повторять предыдущий пункт до исчерпания записей в исходной таблице или до достижения нужного объёма выборки. Долго? да Криво? да Не одним запросом? да Ну а чего вы хотели с такой постановкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 07:04:12 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:20:44 |
|
||
|
Сложная сортировка
|
|||
|---|---|---|---|
|
#18+
хотя пример чисел показывает наглядно, как получиться итоговая сортировка а именно 10 11 12 .. 19 29 20 .. 28 38 30 ..37 39 49 40 .. 48 то тут уже задача упрощаеться... придумать ересь, которая выведет числа вот в такой закономерности продолжая предыдущую идею получим таблицу мин_айди_для_телефона+реальный_айдизаписи мы отсортируем с привязками по телефону. терь надо мыло приркутить както... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:30:19 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38787411&tid=1834025]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 334ms |

| 0 / 0 |
