
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
17.09.2016, 18:50
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Привет! В таблице MySql хранятся закрашенные области (серый цвет), как координаты левого верхнего угла и правого нижнего, т.е. ЧЕТЫРЕ числа (х1,у1,х2,у2) и поле статус=ноль - нет закраски, статус=единица - закрашено.. Как запросом в базу MySql создать новую закрашенную область, если входящие условия - размеры? Т.е. условия такие, например: п.1 начиная слева сверху найти свободную область размером 1х1 и соответственно записать в эту ячейку статус=1 п.2 начиная слева сверху найти свободную область размером 2х2 и соответственно записать в эти ЧЕТЫРЕ ячейки статус=1 То есть для п.1 ответ должен быть 0,0,1,1 (голубой квадратик) для п.2 = 6,0,8,2 (оранжевый квадратик) Нюанс в том, что размер сетки 2000х2000, т.е. всего 4млн квадратиков. Пока вижу два решения: 1. каким-то сложным запросом делать INSERT внутри таблицы используя SET MIN и тд, возможно зацикливание? 2. использовать доп. таблицу (приложил пример на втором рисунке), где перечислены все 4 млн. комбинации, через left join искать не совпадающие ячейки?. но тут коллизия - пока ищу по одной таблице, во вторую уже кто-то пишет... Коллеги, подскажите, куда хотя бы двигаться в размышлениях? Ниже пример SQL который хранит эти закрашенные серым области. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.09.2016, 19:24
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Олег Котейкини поле статус=ноль - нет закраски, статус=единица - закрашено.Долго искал в примере данных - не нашёл. Тыкни пальцем, что ли... Олег Котейкинзапросом в базу MySql создать новую закрашенную область, если входящие условия - размерыНе вижу проблем. Конвертируй свой [censored] исходный формат данных во вменяемый Row-Col-Val - и запрос получится почти тривиальным. Олег Котейкинразмер сетки 2000х2000 И так понятно, что выполнение запроса будет тяжёлым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.09.2016, 20:16
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Поле статус озвучил для понимания. По сути область закрашена уже если есть строка с координатами - именно такая область и красится по координатам. Т.е. по входящим данным в виде двух чисел (размеры ШхВ) нужен INSERT ЧЕТЫРЕХ значений, при этом эти значения в комплексе не должны пересечься с уже существующими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 09:40
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
можно выбрать другую структуру хранения, может тогда проще будет составить скрипт, коллеги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 11:13
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
вот запрос, который создает возможные области для закраски из него уже инсерт сделать можно для него нужна опорная таблица crd, в которой колонка n содержит значения возможных координат в вашем случае 2001 строка от 0 до 2000, для блокировки клеток чтоб в них не красили придется делать таблицу для всех клеток state для не закрашенных = null это для того чтоб не покрашенные клетки можно было блокировать с помощью SELECT FOR UPDATE Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 11:18
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
пожалуй в таблице 2000х2000 state не нужен только координаты клеток для блокировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 14:10
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, ого, спасибо, щас потестирую! опорная таблица crd - там должно быть 2000 строк или все-таки 2000*2000=4000000 строк? т.еб ВСЕ возможные сочетания координат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 14:21
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Олег Котейкинbochkov, ого, спасибо, щас потестирую! опорная таблица crd - там должно быть 2000 строк или все-таки 2000*2000=4000000 строк? т.еб ВСЕ возможные сочетания координат? Должно быть 2001 строка, в запросе таблица сама на себя умножается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 14:42
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, что то уже минут 5 висит... ${size} - это искомый размер в виде числа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 14:46
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, а если не кубик а прямоугольник искать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 14:51
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, хотя вот вывело : Отображение строк 0 - 24 (972196 всего, Запрос занял 0.8070 сек.) Типа что-то нашло, т.е. запрос 0,8 сек? а что висело долго 5 минут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:03
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
первый size - ширина, второй - высота, первый раз запрос- реальное время, второй запрос - из кеша чтоб сократить время надо создать индексы по x1 y1 x2 y2 именно в таком порядке, возможно primary key по полю n поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:07
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, насчет size я основательно тормознул!!))) погода... разобрался!!! по n индекс создал - теперь 0,5 сек а по поводу "...по x1 y1 x2 y2 именно в таком порядке..." - т.е. составной индекс нужен? в той таблице уже есть индекс по id - первичный автоинкремент - он тут не помогает? а вообще получилось очень отличный вариант, соседи со стаковерфлоу неделю вместе думали и такого скоростного не получилось создать! Премного Вам благодарен! Щас индексы составить попробую и отпишусь тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:12
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
очень много извлекать ему приходится добавь в запрос limit 1 по задаче ведь нужна одна доступная область а чтобы поиск был слева или справа order by x1_crd.n desc-справа налево , asc слева направо order by y1_crd.n поиск сверху вниз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:20
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, ну да, limit 1 поставил, он ищет столько же 0,5сек, вывод на экран тормозил просто когда без лимита было. а без order by выводит крайнее слева сверху, как и требуется! точно нужен order by ? Сейчас с ним вот так получилось Отображение строк 0 - 0 (1 всего, Запрос занял 117.4495 сек.). Получается если много результатов , по сути щас миллилон, то сначала сортирует этот миллион а потом лимит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:22
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
могут ускорить запрос 2 составных ключа x1 x2 и y1 y2 чтобы реальное время смотреть надо добавить модификатор к селектор sql_no_cache так по моему называется не удобно с телефона проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:26
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
order by нужен без него mysql первое попавшие вываливает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:40
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, с сортировкой по x и y вообще сервер слетел)) #2006 - MySQL server has gone away составной индекс добавил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 15:52
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
ну тут уж не знаю чем помочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 16:29
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Чисто поржать... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 16:39
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
bochkov, 118 сек, и составной по 4 полям и два составных x1 x1 и y1 y2.... жаль-жаль, думал что все-таки выход есть - ан нет)) а без ORDER BY сервер выдает первое попавшее, но согласно индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 18:27
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Akina, общий размер сетки 2000х2000, где это видно в вашем примере? у вас для варианта сетки 10х10. на 10х10 можно и вручную искать, сидя рядом с сервером и получая от него запрос...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 18:33
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Олег Котейкин , ты способен понять разницу между идеей и реализацией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 19:28
|
|||
|---|---|---|---|
|
|||
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
Akina, наверное нет, простите старикашку. понять-простить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.09.2016, 22:23
|
|||
|---|---|---|---|
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих? |
|||
|
#18+
таблица 2000x2000 эта таблица на 4млн записей например назовём её grid колонки x1 y1 x2 y2 таблица содержит описание клеток в неё никто никогда не пишет только читают с блокировкой перед тем как вставить данные в m_items и таким образом 1 получаем возможную для закраски область 2 читаем клетки for update из grid, в соответствии с этой областью 3 обновляем m_items ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1831346]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 423ms |

| 0 / 0 |
