· 10 years ago · Sep 25, 2016, 06:50 AM
1select x,y
2from c -- Ñм. ответ @mnv
3left join m_items
4on x <= X2-1 and
5 x+2 >= X1 and
6 y <= Y2-1 and
7 y+2 >= Y1
8where x+2<10 and y+2<10
9and id is null
10order by y, x;
11
12CREATE TEMPORARY TABLE IF NOT EXISTS c AS (
13 SELECT x, y FROM (
14 SELECT 0 as x UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
15 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
16 ) x
17 CROSS JOIN (
18 SELECT 0 as y UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
19 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
20 ) y
21);
22
23SET @size = 2 - 1;
24
25SELECT * FROM c WHERE NOT EXISTS (
26 SELECT 1 FROM t WHERE (
27 (x >= x1 AND x <= x2)
28 OR (x + @size >= x1 AND x + @size <= x2)
29 OR (x1 >= x AND x1 <= x + @size)
30 OR (x2 >= x AND x2 <= x + @size)
31 ) AND (
32 (y >= y1 AND y <= y2)
33 OR (y + @size >= y1 AND y + @size <= y2)
34 OR (y1 >= y AND y1 <= y + @size)
35 OR (y2 >= y AND y2 <= y + @size)
36 )
37)
38AND x < 10 - @size
39AND y < 10 - @size
40ORDER BY x, y
41LIMIT 1;
42
43ORDER BY y, x