2013-12-10 25 views
1

我正在创建使用MySQL数据库创建“游戏区域”的游戏。从MySQL到HTML表格(PHP,PDO,MySQL)的坐标

在我的MySQL表中,我有两列pointXpointY,均为INT。我也可以使用POINT,但在我的情况下,这两列是更好的解决方案。

| id | pointX | pointY | player | game | 
|----|--------|--------|--------|------| 
| 1 | -2  | 1  | 7  | 10 | 
| 2 | -3  | 2  | 5  | 10 | 
| 3 | 2  | -2  | 2  | 10 | 
| 4 | -2  | -1  | 1  | 10 | 

我应该从这个MySQL表中生成HTML表。像这样的事情,但没有coordinateheaders(以下那些只是为了更容易理解):

|-----|----|----|----|----|----|----| 
| Y/X | -3 | -2 | -1 | 0 | 1 | 2 | 
|-----|----|----|----|----|----|----| 
| -2 | | | | | | 2 | 
|-----|----|----|----|----|----|----| 
| -1 | | 1 | | | | | 
|-----|----|----|----|----|----|----| 
| 0 | | | | | | | 
|-----|----|----|----|----|----|----| 
| 1 | | 7 | | | | | 
|-----|----|----|----|----|----|----| 
| 2 | 5 | | | | | | 
|-----|----|----|----|----|----|----| 

加。每天<td>应该有属性data-cell,其中包括坐标为例data-cell="-2x-1"

上手的最佳方式是什么?

+0

范围是否固定? *保证*没有两个玩家会占据相同的坐标(即,你是否定义了一个超过'(pointX,pointY)')的唯一性约束? – eggyal

+0

表格将随表格中的数字“无限制”增长。每个单元只有一个数字。 –

+0

'游戏'栏标识哪个游戏将坐标属于。坐标始终是独特的/游戏。 –

回答

2
$rng = $dbh->prepare(' 
    SELECT MIN(pointX) AS minX, MIN(pointY) AS minY, 
      MAX(pointX) AS maxX, MAX(pointY) AS maxY 
    FROM  field 
    WHERE game = ? 
    LOCK IN SHARE MODE 
'); 
$qry = $dbh->prepare(' 
    SELECT pointX, pointY, player 
    FROM  field 
    WHERE game = ? 
    ORDER BY pointX, pointY 
'); 
$dbh->beginTransaction(); 
$rng->execute([$game_id]); 
$qry->execute([$game_id]); 
$dbh->rollBack(); 

$limits = $rng->fetch(); 
$player = $qry->fetch(); 
echo '<table>'; 
for ($y = $limits['minY']; $y <= $limits['maxY']; $y++) { 
    echo '<tr>'; 
    for ($x = $limits['minX']; $x <= $limits['maxX']; $x++) { 
    printf('<td data-cell="%dx%+dy">', $x, $y); 
    if ($player and $player['pointX'] == $x and $player['pointY'] == $y) { 
     echo htmlentities($player['player']); 
     $player = $qry->fetch(); 
    } else { 
     echo '&nbsp;'; 
    } 
    echo '</td>'; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 
+0

谢谢你,真的! :) –

0

看起来你已经有了一个良好的开端。假设X和Y的单元格数量为$ xcells和$ ycells,那么接下来的步骤是构建您的表格,如下所示:

echo "<table>"; 
for ($i = -3; $i < $ycells; i++) { 
    echo "<tr>"; 
    for ($j = -3; $j < $xcells; j++) { 
    echo "<td data-cell='" . $i . "y" . $j . "x'>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>";