· 10 years ago · Sep 10, 2016, 03:14 PM
1CREATE TEMPORARY TABLE IF NOT EXISTS c AS (
2 SELECT x, y FROM (
3 SELECT 0 as x UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
5 ) x
6 CROSS JOIN (
7 SELECT 0 as y UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
8 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
9 ) y
10);
11
12SET @size = 2 - 1;
13
14SELECT * FROM c WHERE NOT EXISTS (
15 SELECT 1 FROM t WHERE (
16 (x >= x1 AND x <= x2)
17 OR (x + @size >= x1 AND x + @size <= x2)
18 OR (x1 >= x AND x1 <= x + @size)
19 OR (x2 >= x AND x2 <= x + @size)
20 ) AND (
21 (y >= y1 AND y <= y2)
22 OR (y + @size >= y1 AND y + @size <= y2)
23 OR (y1 >= y AND y1 <= y + @size)
24 OR (y2 >= y AND y2 <= y + @size)
25 )
26)
27AND x < 10 - @size
28AND y < 10 - @size
29ORDER BY x, y
30LIMIT 1;