【问题标题】:Coordinates from MySQL to HTML table (PHP, PDO, MySQL)从 MySQL 到 HTML 表的坐标(PHP、PDO、MySQL)
【发布时间】:2013-12-28 12:59:48
【问题描述】:

我正在创建使用 MySQL 数据库创建“比赛场地”的游戏。

在我的 MySQL 表中,我有两列 pointX 和 pointY,都是 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 表。像这样的东西,但没有坐标标题(下面这些只是为了更容易理解):

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

另外.. 每个<td> 都应该有属性data-cell,其中包括坐标,例如data-cell="-2x-1"。

最好的入门方式是什么?

【问题讨论】:

  • 范围是固定的吗?是否保证没有两个玩家会占据相同的坐标(即您是否定义了对(pointX, pointY) 的唯一性约束)?
  • 表格将根据表格中的数字“无限”增长。每个单元格只有一个数字。
  • Game 列标识坐标所属的游戏。并且坐标始终是唯一的/游戏。

标签: php html mysql pdo


【解决方案1】:
$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>';

【讨论】:

    【解决方案2】:

    看来您已经有了一个良好的开端。假设 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>";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多