[英]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]
}
?>
可能的格式:
<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.