2

我很难把它放到一张桌子上。现在我正在使用两张桌子并将它们并排放置,但我认为这不是最好的解决方案。我已经把桌子都摆好了,我只是不知道如何把它变成一张桌子。

while ($row = mysql_fetch_assoc($query)) {

$result .= "<tr> <td> {$row['a']} the {$row['b']} </td>      </tr>";
 }

  echo $thegames;

这会产生类似的东西:

       james the giant
       rick the monster
       chris the goblin

我想要的是能够从一个单独的 while 循环中添加更多的 td...

  while($secondrow = mysql_fetch_assoc($secondquery)) { 
   $first = "<td> {$secondrow['alias']} </td>";
   $second = "<td> {$secondrow['number']} </td>";
  }

所以最后我希望它看起来像这样:

   james the giant $secondrow['alias']  $secondrow['number'] 
   rick the monster $secondrow['alias']  $secondrow['number']

ETC...

希望这是有道理的。我现在正在做的是创建两个单独的表并尝试将它们排列起来,但不喜欢这种方法。任何帮助都会很棒。

4

2 回答 2

4

从您的代码来看,您实际上不需要执行两个查询。如果您期望每行有 4 列,则也无需执行多个 while 循环。相反,更改查询结构以使用 JOIN;这将使您能够一次获得完整的结果集。

如前所述,请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。

我将向您展示如何使用 PDO 进行 JOIN,并根据您到目前为止显示的代码对您的表名和主键进行一些假设:

$pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
$sql = '
    SELECT 
        `players`.`id`, 
        `players`.`a`,
        `players`.`b`, 
        `player_info`.`alias`,
        `player_info`.`number`   
    FROM 
        `players` 
    LEFT JOIN
        `player_info` ON  `players`.id = `player_info`.`player_id`
';
$players = $pdo->query($sql);

$row_data= array();
while ($row = $players->fetch()) {
    $row_data[] = '
        <td>'.$row->a.' the '.$row->b.'</td>
        <td>'.$row->alias.'</td>
        <td>'.$row->number.'</td>   
    ';
}

echo '<table><tr>'.implode('</tr><tr>', $row_data).'</tr></table'>;

如果连接被证明是不切实际的(不是典型的),那么你应该构建你的数据数组并生成 HTML 作为两个单独的步骤:

// gather the data
$data = array();
$first = $pdo->query($sql);
while($arow = $first->fetch()) {
    $one_data['a'] = $arow->a;
    $one_data['b'] = $arow->b;

    $second = $pdo->query($second_sql);
    while($brow = $second->fetch()) {
        $one_data['alias'] = $brow->alias;
        $one_data['number'] = $brow->number;
    }
    $data[] = $one_data;
}

// now generate HTML
print '<table>';
foreach ($data as $row) {
    print '
        <tr>
            <td>'.$row['a'].' the '.$row['b'].'</td>
            <td>'.$row['alias'].'</td>
            <td>'.$row['number'].'</td> 
        </tr>
    ';
}
print '</table>';

作为旁注......名为aandb的列只是一个bad . 想法。这些列代表数据,因此为它们提供反映数据内容的标签。今天处理神秘专栏可能会很好......你记得他们的意思。6个月后?一年后?为所有列和变量使用有意义的名称——为什么不呢?

文档

于 2013-04-05T15:28:35.977 回答
0

您可以将 2 个集合组合成 1 个数组并在打印时循环该数组。

编辑; 有人发现这是一个糟糕的答案,但这意味着您同意上述结果,即在您的模板中提取 sql 行。

您首先为模板准备数据,然后循环并打印它。

于 2013-04-05T15:25:52.137 回答