powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
10 сообщений из 35, страница 2 из 2
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39317358
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT x.x1,x.y1
    -> FROM p,x
    -> GROUP BY x.x1,x.y1
    -> HAVING SUM(MBRIntersects(p,rng)) = 0


странный запрос
по такому количеству записей
очень не выгодный
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39317359
bochkov,

это вместо опорной таблицы crd попробовать применить?
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39319073
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну когда мы множим 4 раза таблицу опорную типо на 2000 то получаем не 4 милиарда, а 16 милиарда миллиардов.

вот идея... а если бы задача была одномерной, как бы мы решали? искали все возможное отрезки и проверяли кто из них свободен?
врядли, мы бы взяли из набора старт-конец, пронумеровали бы их отсортировав по значению старт, соеденили бы номер = номер+1
и получили бы список конецН-началоН+1 - сразу список свободных отрезков.

если расмотреть двумерный случай, найти отрезки по оси х между фигурами, найти отрезки по оси игрик, и скать на этом пересечении...вроде как существенно меньше 16 милиарда милиардов.
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39319096
alex564657498765453,

хм и правда ИДЕЯ!! щас покумекаю, спасибо!
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39319787
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
SELECT xx.x1,yy.y1,xx.x2,yy.y2

FROM

(
	SELECT tx1.x2 as 'x1',tx2.x1 as 'x2'
	FROM xy tx1, xy tx2
	WHERE tx1.x2 < tx2.x1
)xx,
(
	SELECT ty1.y2 as 'y1',ty2.y1 as 'y2'
	FROM xy ty1, xy ty2
	WHERE ty1.y2 < ty2.y1
)yy

WHERE 
	NOT EXISTS
	(
		SELECT 1 
		FROM xy 
		WHERE
			(	(xy.x1 >= xx.x1 AND xy.x1 < xx.x2) OR (xy.x2 > xx.x1 AND xy.x2 <= xx.x2)	) AND
			(	(xy.y1 >= yy.y1 AND xy.y1 < yy.y2) OR (xy.y2 > yy.y1 AND xy.y2 <= yy.y2)	)
	)	 

ORDER BY xx.x1,yy.y1,xx.x2,yy.y2



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

Код: 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.
CREATE PROCEDURE `pFree`(IN `dx` INT, IN `dy` INT)
	LANGUAGE SQL
	NOT DETERMINISTIC
	READS SQL DATA
	SQL SECURITY DEFINER
	COMMENT ''
BEGIN
SELECT 
	xx.x1,
	yy.y1,
	LEAST(xx.x2, xx.x1+dx) as 'x2',
	LEAST(yy.y2, yy.y1+dy) as 'y2', 
	xx.x2 - xx.x1 - dx + yy.y2 - yy.y1 - dy as 'delta'

FROM

(
	SELECT DISTINCT tx1.x2 as 'x1',tx2.x1 as 'x2'
	FROM xy tx1, xy tx2
	WHERE tx1.x2 < tx2.x1
)xx,
(
	SELECT DISTINCT ty1.y2 as 'y1',ty2.y1 as 'y2'
	FROM xy ty1, xy ty2
	WHERE ty1.y2 < ty2.y1
)yy

WHERE 
	xx.x2 - xx.x1 >= dx AND
	yy.y2 - yy.y1 >= dy AND
	NOT EXISTS
	(
		SELECT 1 
		FROM xy 
		WHERE
			(	(xy.x1 >= xx.x1 AND xy.x1 < xx.x2) OR 
				(xy.x2 > xx.x1 AND xy.x2 <= xx.x2) OR
				(xy.x1 <= xx.x1 AND xy.x2 >= xx.x2)
			) AND
			(	(xy.y1 >= yy.y1 AND xy.y1 < yy.y2) OR 
				(xy.y2 > yy.y1 AND xy.y2 <= yy.y2) OR
				(xy.y1 <=yy.y1 AND xy.y2 >= yy.y2)	
			)
	)	 

ORDER BY xx.x1,yy.y1,xx.x2,yy.y2
LIMIT 1;
END
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39320116
alex564657498765453,

ого! спс, пощупаю щас.

а CREATE PROCEDURE обязательно?
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39320389
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Олег Котейкин,

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

я кстате поигрался, нарисовал на поле 34 на 25 (размер клеточного листа блокнота) с десяток фигур, и потом позаполнял находя этой процедурой, ну находил, тут же инсертом добавлял, находил следующую...походу теперь без ошибки... начал на досуге думать...а как бы можно было оптимизировать. ведь с ростом числа фигур, растут таблицы хх уу в запросе... с другой стороны, вопрос оптимальности... я видел как запрос ставит поменьше прямоугольник в большую зону тем самым делая не возможным вставку большей фигуры.
...
Рейтинг: 0 / 0
Как сделать INSERT с значениями, которых нет в интервалах среди уже существующих?
    #39322339
alex564657498765453,

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


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