2016-02-29 134 views
1

我有一个名为Table_I的表格,有31行。我想显示每行到一个预定义(现有)31个单元格的表。也就是说,每个表格行都放入每个单独的表格单元格。在预定义的html表格中显示数据库表格记录

Table_I 

     ID | Name | Rowcol | 
     ..................... 
     1 | ABC | 3-1 | 
     2 | PQR | 3-2 |  
     3 | XYZ | 3-3 | 
     4 | MNO | 3-4 | 
     5 | DEF | 4-1 | 
     6 | QRS | 4-2 |  
     7 | UVW | 4-3 | 
     8 | IJK | 4-4 | 

输出:

Predefined table 

    | Cell 1 | Cell 2 | Cell 3 | Cell 4 | 
    ..................................... 
    | ABC | PQR | XYZ | MNO | 
    ..................................... 
    | DEF | QRS | UVW | IJK | 

代码:

<?php 

...Connection to DB... 

$query="SELECT name, rowcol 
     FROM Teble_I 
     "; 

$params = array($_REQUEST['query']); 

$results = sqlsrv_query($conn, $query, array(), array("Scrollable" => 'static')); 

if($results===false) 
{ die(FormatErrors(sqlsrv_errors())); } 

if($results===false) 
{ die(FormatErrors(sqlsrv_errors())); } 

$r=3; 
$c=1; 

while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 
    { 

?> 

<body> 
<table width="200" border="1"> 
<tr> 
<?php 
    if($row['rowcol']==$r ."-". $c) 
     { 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
     } 

    $c++; 

    if ($r==3 && $c==5 || $r==4 && $c==5) 
     { 
      $r++; 
      $c=1; 
     } 

?> 

</tr> 
<tr> 
<?php 
    if($row['rowcol']==$r ."-". $c) 
     { 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
      echo "<td>".$row['name']."<td>"; 
     } 

    $c++; 

    if ($r==3 && $c==5 || $r==4 && $c==5) 
     { 
      $r++; 
      $c=1; 
     } 
    } 
?> 

</tr> 

</table> 

预期输出:真正需要

| Cell 1 | Cell 2 | Cell 3 | Cell 4 | 
    ..................................... 
    | ABC | PQR | XYZ | MNO | 
    ..................................... 
    | DEF | QRS | UVW | IJK | 

帮助和赞赏。

在此先感谢。

+0

连接到数据库,查询数据库,遍历结果并准备输出。我没有包含代码,因为我不想让人们读到这些。 – Typoheads

+0

哈哈@Typoheads ......感谢您的回复。我已经做了连接,数据库查询和循环,但无济于事。我将修改原始问题并包含我现在的代码。 – user

回答

0

谢谢你们!我用数组计算出了它。下面是我做到的:

<?php 

    ...Connection to DB... 

    $query="SELECT name, rowcol 
      FROM Teble_I 
      "; 

    $params = array($_REQUEST['query']); 

    $results = sqlsrv_query($conn, $query, array(), array("Scrollable" => 'static')); 

    if($results===false) 
    { die(FormatErrors(sqlsrv_errors())); } 

    if($results===false) 
    { die(FormatErrors(sqlsrv_errors())); } 

// set array 
$array = array(); 

//select and display record from database 
while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 

    { 
     // add each row returned into an array 
      $array[] = $row; 

    } 

    ?> 

    <body> 
    <table width="200" border="1"> 
    <tr> 
    <td><?php echo $array[0]['name']; ?></td> 
    <td><?php echo $array[1]['name']; ?></td> 
    <td><?php echo $array[2]['name']; ?></td> 
    <td><?php echo $array[3]['name']; ?></td> 
    </tr> 
    </table> 

我好兴奋!

0

使用动态sql查询。

查询

declare @sql as varchar(max); 

select @sql = 'select ' + stuff(
    (
     select distinct ',max(case ID when ' + cast(ID as varchar(2)) + ' 
       then Name end) as [Cell ' + cast(ID as varchar(2)) + ']' 
     from Table_I 
     for xml path('') 
    ), 
    1, 1, '' 
); 
select @sql += ' from Table_I;' 
execute(@sql); 
+0

谢谢Ullas。老实说,我很感谢你的回应,但我更加困惑于你的解决方案。我还是PHP的新手,但要尽快学习。 – user

+0

这不是'PHP'。 – Wanderer

+0

这是PHP MSSQL。 – user

0

这可能会满足您的需求非常简单的例子。 $data仅用于演示目的,它应该是您的SQL数据。

$data = [ 
    ['ID' => 1, 'Name' => 'ABC', 'Rowcol' => '3-1'],  
    ['ID' => 2, 'Name' => 'PQR', 'Rowcol' => '3-2'], 
    ['ID' => 3, 'Name' => 'XYZ', 'Rowcol' => '3-3'], 
    ['ID' => 4, 'Name' => 'MNO', 'Rowcol' => '3-4'], 
    ['ID' => 5, 'Name' => 'ABC', 'Rowcol' => '4-1'],  
    ['ID' => 6, 'Name' => 'PQR', 'Rowcol' => '4-2'], 
    ['ID' => 7, 'Name' => 'XYZ', 'Rowcol' => '4-3'], 
    ['ID' => 8, 'Name' => 'MNO', 'Rowcol' => '4-4'] 
]; 

$finalData = []; 
foreach($data as $row) { 
    $position = explode('-', $row['Rowcol']); 

    $finalData[$position[0]][$position[1]] = $row['Name']; 
} 
print_r($finalData); 
$output = "<table>"; 
$output .= "<tr>"; 
for($i=1;$i<=count(reset($finalData));$i++) { 
    $output .= "<th>Cell " . $i . "</th>"; 
} 
$output .= "</tr>"; 
foreach($finalData as $row) { 
    $output .= "<tr>"; 
    foreach($row as $column) { 
     $output .= "<td>" . $column . "</td>"; 
    } 
    $output .= "</tr>"; 
} 
$output .= "</table>"; 

print $output; 

$finalData将是一个映射阵列,其具有的每一行和列的条目:

Array 
(
    [3] => Array 
     (
      [1] => ABC 
      [2] => PQR 
      [3] => XYZ 
      [4] => MNO 
     ) 

    [4] => Array 
     (
      [1] => ABC 
      [2] => PQR 
      [3] => XYZ 
      [4] => MNO 
     ) 

) 
+0

再次感谢@Typoheads。我修改了我的问题。我希望这是有道理的,你可以再次帮助我。 – user

+0

请看看我编辑的答案。 – Typoheads

+0

你真棒@Typoheads !!!我试了一下,它的工作原理,但问题是表中的值('$ data')是用户从表单输入的值。它们不是预定义的。 我用: '$ row = sqlsrv_fetch_array($ results,SQLSRV_FETCH_ASSOC)' 来获取表记录。 – user

0

修改代码:

<body> 
 
<table width="200" border="1"> 
 
<tr> 
 
<?php 
 
$i=0 
 
while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 
 
    { 
 
      $i++; 
 
      echo "<td>".$row['name']."</td>"; 
 
      if ($i%4 == 0) 
 
       echo "</tr><tr>"; 
 
    
 
    } 
 

 
?> 
 

 
</tr> 
 
</table>

+0

感谢@Rkand,但表格是预定义的。我之前尝试过类似于你的代码的东西,它为我绘制了一个新表格,而不是填充已经创建的html表格中的单元格。 – user