您可以使用此解决方案:
SELECT 1
FROM game_piece
WHERE
(x = $o_x AND y IN ($o_y + 1, $o_y - 1)) OR
(y = $o_y AND x IN ($o_x + 1, $o_x - 1))
GROUP BY type
HAVING COUNT(1) = 3
$o_x
分别$o_y
是 originX 和 originY 输入参数。
如果恰好有 3 个相同类型的片段连接到原点(垂直或水平),则返回1
,否则返回空结果集。
编辑:
您可以尝试什么来确定网格上是否有任何块具有 2 个或多个相同的相邻类型:
SELECT COUNT(1) > 0 AS doesExist
FROM
(
SELECT 1
FROM game_piece p
INNER JOIN game_piece o ON
p.type = o.type AND (
(p.x = o.x AND p.y IN (o.y + 1, o.y - 1)) OR
(p.y = o.y AND p.x IN (o.x + 1, o.x - 1))
)
GROUP BY p.type, o.x, o.y
HAVING COUNT(1) > 1
) a
1
如果有一件或多件,则返回,否则返回0
。