|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Нестандартный SQL запрос |
|
MySQL - Нестандартный SQL запрос
|
Пользователь Сообщения: 78 |
Здравствуйте, помогите пожалуйста понять как лучше составить таблицу и запрос SQL.
неделю голову ломаю, с SQL знаком был только со стандартными простыми запросами. Цель: есть база данных объектов . у каждого есть ДО 10 координат x,y,z Составил таблицу примерно так.: Idобъекта ; Nкоординат ; x1 ; y1 ; z1; x2 ; y2 ; z2 ... ; x10 ; y10 ; z10 Цель: Найти другой объект, с которым совпадает наибольшее ЧИСЛО координат. Думал вынести координаты каждой точки в отдельную таблицу, но проще не становится. Есть ли варианты решения этой задачи??? PS. Таблица объектов в перспективе будет довольно большой: несколько тысяч объектов. |
|
Отправлено: 09:30, 28-05-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Я не вижу никаких вариантов для запроса. Ибо нужно сравнивать каждую тройку координат искомого объекта с каждой тройкой координат всех остальных объектов. При совпадении — брать следующую тройку координат и сравнивать со всеми оставшимися тройками координат найденного объекта. Запоминать максимальное число совпадений и сам этот объект. Затем искать дальше, исключив найденный объект.
|
Отправлено: 15:28, 28-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Спасибо. Тему оставлю открытой, на случай если вдруг у кого нибудь предложения еще найдутся.
|
Отправлено: 16:16, 28-05-2013 | #3 |
Ветеран Сообщения: 1630
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Например, может быть объект в котором совпадают только координаты x и y, причем все, а z - все не совпадают, тогда такой объект имеет 20 совпадений - достаточно много, а он при алгоритме Iska выявляться не будет. По-моему, можно просто втупую перебирать все объекты и сравнивать соответсвующие координаты x1 c x1, y1 c y1 и т.п., а в 31 "координату"-счетчик S записывать-насчитывать совпадения. После перебора всех элементов базы надо будет просто отсортировать ее по убыванию счетчика. На простановку счетчиков - около 300 000 операций сравнения (много?). Сортировка - стандартная операция. Вообще для составления правильного алгоритма, надо понимать "физический смысл" математической модели, который не рассказан. |
|
Отправлено: 14:37, 05-06-2013 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата rus-4-ever:
Цитата alef2474:
![]() |
|||
Отправлено: 16:40, 05-06-2013 | #5 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Доброе утро!
Вчера прочитал эту тему, после Up темы. Пока ехал в электричке, было время немного поразмышлять. Так как в SQL я еще не силен, прошу сильно не пинать) Пришла в голову такая вот идея. Допустим у нас есть таблица с координатами, со структурой как предоставил Автор. Так же предполагаем, что координаты храняться в численном типе данных. Соответственно, получаем, что координаты совпадают при Всего координат может быть до 10. Значит необходимо посчитать сколько "нулей" получается в выражении. Для этого объединяем все эти 10 выражений через Union, и ищем сумму таких выражений. Причем, если выражение равно нулю, то для Union используем 1. Кусок кода:
Ну а далее - дело фантазии. Для примера идет простая сортировка. Выводится столбец с исходным номером объекта (FindFor), другими объектами (Finded), и количеством совпадений (cnt). Полный код ниже. |
------- Отправлено: 09:33, 06-06-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать LilLoco, идея хороша. Но! Искать совпадения нужно не только среди Объект1.X1 и Объект2.X1, а Объект1.X1 и Объект2.X1 + Объект1.X1 и Объект2.X2 + … + Объект1.X1 и Объект2.XN и т.д. Понимаете? Придётся сравнивать каждую координату объекта со всеми координатами всех прочих объектов.
|
Отправлено: 09:55, 06-06-2013 | #7 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата Iska:
![]() А если тогда просто изменить структуру таблицы, так чтобы не столбцы задавали координаты, а строки. Т.е. как то так: Id, ObjectId, CoordId, X, Y, Z где ObjectId - номер объекта, CoordId - порядковый номер координат, X,Y,Z - координаты. И после этого при Left Join сводить по не ObjectId и по не CoordId. Ну и немного изменить подзапрос? |
|
------- Отправлено: 10:34, 06-06-2013 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата LilLoco:
(утрирую, конечно, но суть видна). Цитата LilLoco:
|
||
Отправлено: 11:16, 06-06-2013 | #9 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 12:00, 06-06-2013 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - запрос SQL | virus8 | Программирование и базы данных | 3 | 15-05-2013 16:35 | |
Delphi - SQL запрос с параметром | iliya24 | Программирование и базы данных | 1 | 30-01-2010 10:28 | |
sql запрос | Вебмастеру | 20 | 30-12-2006 22:31 | ||
SQL запрос | pauluss | Вебмастеру | 5 | 11-06-2004 09:14 | |
SQL-запрос | anridir | Программирование и базы данных | 2 | 23-09-2002 07:11 |
|