2016-12-10 7 views
1

mysqlの結果からテーブル名を取得するには?

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 ) )

ように、それぞれのテーブル名と私は結果を必要とする上記のクエリから

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

を次のようにMySQLのクエリは、テーブルは変更される場合があり、15の以上の列を持つです。
どのようにクエリを変更して結果を得るには?

+0

こんにちは。 'SELECT'部分を修正してください。 't1.idをIDとして、t1.columnを列1として、t3.column3を列3として、... –

+0

テーブル内に15列以上存在し、テーブルごとに異なる可能性があります –

+0

Ok。これは不可能です...直接:)しかし、あなたはいくつかのトリックを使用することができます。例:テーブル構造( 'SHOW COLUMNS')を分析し、t1.idをt1_id、t1.c1をt1_c1、t2.idをt2_id ...としてSQLクエリを動的に作成します。これはいくつかのORMで使用されるヒントです。 –

答えて

0

クエリを作成した後、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("table1","table2","table3"); 

上記のコードをskiping配列に追加することができ、このコード

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

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

を使用することによって得ることができますデータベースから始めることができるテーブル

$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で使用)この例で

+0

私は各結果内の別のデータとしてテーブル名を取得したいと思います。 あなたはforeachループの中で言ったように –

+0

複数のテーブルからすべてのデータを取得したいが、テーブル名はそれほど多くない?これはあなたが習得したいものですか? –

+0

はい私は、データの一部としてそれぞれのテーブル名を含む複数のテーブルからのすべてのデータを取得する必要があります(列は異なる場合があります)。 –

1

別の解決策

1テーブル

http://dev.mysql.com/doc/refman/5.7/en/show-columns.htmlを分析するために、テーブルからのshow列を実行テーブル

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

2のリストを作成します

<?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, 
    ) 
) 

テーブルを持つか、またはマルチディジット配列を作成するキーの結果:)

関連する問題