簡體   English   中英

僅顯示查詢表中存在的MySQL列

[英]Show only MySQL columns that exist in queried table

我有幾個通過以下代碼動態生成為html表的MySQL表。 但是,這些表沒有相同的列。 即,一個表具有描述列,而另一個則沒有。

以下代碼是否是在腳本的各個表之間具有所有可能的MySQL列,但僅顯示所選表存在的MySQL列的最佳方法? 我覺得為每列寫“ isset”是多余的。 謝謝!

<?php
$query = " SELECT * FROM $tablename ";

$query_select = mysqli_query($con,$query);
while($row = mysqli_fetch_array($query_select)) {
?>

<table>
  <tr>

    <?php if(isset($row['name'])){ ?>
      <td><?php echo $row['name'];?></td>
    <?php } ?>

    <?php if(isset($row['description'])){ ?>
      <td><?php echo $row['description']?></td>
    <?php } ?>

  </tr>
</table>

您可能需要使代碼適應結果集中的字段:

<?php
$result = mysqli_query($con,$query);
$fields = mysqli_fetch_fields($result);
$myaliases = array(
  'column_id' => 'id'
);
?>
<table>
<tr>
  <?php foreach ($fields as $field): ?>
    <th><?php echo $myaliases[$field->name] ?: $field->name; ?></th>
  <?php endforeach; ?>
</tr>
<?php while($row = mysqli_fetch_array($result)): ?>
<tr>
  <?php foreach ($fields as $field): ?>
    <td><?php echo $row[$field->name]; ?></td>
  <?php endforeach; ?>
</tr>
<?php endwhile; ?>
</table>

重新評論:

我在上面添加了代碼以為列標題打印表格行。

我還column_id了一個在輸出column_id字段名稱column_id映射到表標題id的示例。 如果我沒有為給定的列定義別名,則使用PHP 5.3運算符?:將其默認為原始字段名稱?:

您也可以在SQL查詢中定義列別名,例如SELECT column_id AS id ...

http://www.php.net/manual/en/mysqli-result.fetch-fields.php

你可以foreach數組來代替。

<?php
$query = " SELECT * FROM $tablename ";   

$query_select = mysqli_query($con,$query);
?>
<table>
<?php while($row = mysqli_fetch_array($query_select, MYSQLI_ASSOC)) { ?>
  <tr>
    <?php foreach($row as $key => $value) { ?>
      <td><?=$value?></td>
    <?php } //Endforeach ?>
  </tr>
<?php } //Endwhile ?>
</table>

如果需要打印標簽,還可以使用關聯數組和附加迭代來執行此操作。

<?php
$query = " SELECT * FROM $tablename ";
$keys = array('name' => 'Name Label', 'description' => 'Description Label');    

$query_select = mysqli_query($con,$query);
$i = 0;
?>
<table>
<?php while($row = mysqli_fetch_array($query_select, MYSQLI_ASSOC)) { ?>
  <?php if($i == 0) { ?>
    <tr>
      <?php foreach($row as $key => $value) { ?>
        <td><b><?=$keys[$key]?></b></td>
      <?php } //Endforeach ?>
    </tr>
  <?php } $i++; //Endif ?>
  <tr>
    <?php foreach($row as $key => $value) { ?>
      <td><?=$value?></td>
    <?php } //Endforeach ?>
  </tr>
<?php } //Endwhile ?>
</table>

您可以循環瀏覽結果。 但是,這不會執行任何檢查。 最有可能的是,您將必須執行以下操作,具體取決於您從數據庫中實際獲取的內容。

<?php foreach ($row as $field): ?>
    <?php if ($field): ?>
        <td><?php echo $field; ?></td>
    <?php endif; ?>
<?php endforeach; ?>

編輯:為了與您在上面添加的注釋保持一致,您可以簡單地刪除if子句。

不知道這是否是您需要的,但是您可以使用索引而不是名稱來代替列:

<?php
   $query = " SELECT * FROM $tablename ";

    $query_select = mysqli_query($con,$query);
    while($row = mysqli_fetch_array($query_select)) {
      echo $row[0] ." ".$row[1]." ".$row[2]
    }
?>

mysql_fetch_array

可能的格式:

<table> 
    <?php 
    $query = " SELECT * FROM $tablename ";
    $query_select = mysqli_query($con,$query);
    while($row = mysqli_fetch_array($query_select)) { ?>
         <tr>
         <?php for(var $i=0; $i < count($row); $i++){ 
              echo "<td>". $row[i] ."</td>";
         } ?>
         </tr>
    <?php } ?>
</table> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM