簡體   English   中英

如何從mysql結果中獲取表名?

[英]How to get table name from mysql result?

MySQL查詢如下

SELECT t1.*, t2.*, t3.*, t4.*, t5.*, t6.* FROM table1 t1 INNER JOIN table2 t2 INNER JOIN table3 t3 INNER JOIN table4 t4 INNER JOIN table5 t5 INNER JOIN table6 t6 order by t1.updated_time, t2.updated_time, t3.updated_time, t4.updated_time, t5.updated_time, t6.updated_time desc

從上面的查詢中,我需要帶有各自表名稱的結果,例如

Array( [0] => stdClass Object ( [id] => 1 [cloumn1] => data1 [column2] => table3 [updated_time] => data1 ) [1] => stdClass Object ( [id] => 2 [cloumn1] => data1 [column2] => table1 [updated_time] => data2 ) )

該表有超過15列,可能會有所不同。
如何通過修改查詢來達到結果?

查詢后,您可以進行foreach循環以獲取所有列名。 像這樣

while($row = mysqli_fetch_assoc($query)){
    foreach($row as $key => $value){
        echo "$key=$value";
    }
}
 Update 

如果要在數據庫中獲取表名,可以嘗試類似的方法。

$sql = "SHOW TABLES FROM database";
$result = mysqli_query($conn,$sql);

while ($row = mysqli_fetch_row($result)) {
    echo "Table: {$row[0]}\n";
}

更新

首先,我們需要獲取表名。 由於您不知道表名,因此可以使用以下代碼獲取表名

$tables = array();
$sql = "SHOW TABLES FROM database";
$result = mysqli_query($conn,$sql);

while ($row = mysqli_fetch_row($result)) {
    $tables[] = $row[0];
}

如果有表,可以跳過上面的代碼將它們添加到數組中

$tables = array("table1","table2","table3");

獲取所有表后,我們可以從數據庫開始

$data = array();
foreach($tables as $table){
    $query = "select * from $table";
    $res = mysqli_query($conn,$query);
    while($row = mysqli_fetch_assoc($res)){
        $i=1;
        foreach($row as $key => $value){
            $data[$i][$key][$value];
            $i++;
        }
    }
}

根據您的需要更新代碼。 這是一個例子

另一個解決方案(由某些ORM使用)

1.創建表列表

<?php $tables = ['table1', 'table2', 'table3']; ?>

2.執行SHOW COLUMNS FROM表來分析表

http://dev.mysql.com/doc/refman/5.7/en/show-columns.html

<?php
$structures = [];
$structuresLinear = [];
foreach( $tables as $table ) {
  $query = mysqli_query('SHOW TABLES FROM ' . $table);

  while ($row = mysqli_fetch_row($query)) {
    $structures[$table][] = $row[0];
    $structuresLinear[] = sprintf('%s.%s as %s', $table, $row[0], $table . '_' . $row[0]);
  }
}

您將在$structures為每個表保留所有字段,並在另一個$structuresLinear上重命名不同的字段。

例如: ['table1.id as table1_id', 'table1.name as table1_name', ...]

3.創建您的最終查詢

<?php
$sql  = 'SELECT ';
$sql .= implode(', ', $structuresLinear);
$sql .= ' FROM ' . implode(' INNER JOIN ', $tables);
$sql .= ' ORDER BY ' . implode(', ',
  array_map(function($t) {
    return $t . '.updated_time';
  }, $tables)
);

?>

產量

您將擁有以下內容:

SELECT
  table1.id as table1_id,
  table2.id as table2_id, table2.col2 as table2_col2, table2.col3 as table2_col3
FROM table1
  INNER JOIN table2
ORDER BY
  table1.updated_time,
  table2.updated_time

最后的數組將是:

Array(
    [0] => Array(
        table1_id = table1.id,
        table2_id = table2.id,
        table2_col2 = table2.col2,
        table2_col3 = table2.col3,
    )
)

您還可以拆分每個$ key結果以包含表或創建multidim數組:)

暫無
暫無

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

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