Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从mysql结果中获取表名?_Php_Mysql_Join_Inner Join - Fatal编程技术网

Php 如何从mysql结果中获取表名?

Php 如何从mysql结果中获取表名?,php,mysql,join,inner-join,Php,Mysql,Join,Inner Join,MySQL查询如下所示 选择t1.*、t2.*、t3.*、t4.*、t5.*、t6* 来自表1 t1 内连接表2 t2 内连接表3 t3 内连接表4 t4 内连接表5 t5 内连接表6 t6 按t1.更新时间、t2.更新时间、t3.更新时间、t4.更新时间、t5.更新时间、t6.更新时间描述排序 从上面的查询中,我需要相应表名的结果,如 数组( [0]=>stdClass对象 ( [id]=>1 [cloumn1]=>data1 [第2列]=>表3 [更新时间]=>数据1 ) [1] =>std

MySQL查询如下所示

选择t1.*、t2.*、t3.*、t4.*、t5.*、t6*
来自表1 t1
内连接表2 t2
内连接表3 t3
内连接表4 t4
内连接表5 t5
内连接表6 t6
按t1.更新时间、t2.更新时间、t3.更新时间、t4.更新时间、t5.更新时间、t6.更新时间描述排序

从上面的查询中,我需要相应表名的结果,如

数组(
[0]=>stdClass对象
(
[id]=>1
[cloumn1]=>data1
[第2列]=>表3
[更新时间]=>数据1
)
[1] =>stdClass对象
(
[id]=>2
[cloumn1]=>data1
[第2列]=>表1
[更新时间]=>数据2
)
)

表中有超过15列,可能会有所不同。

如何通过修改查询来获得结果?

在进行查询后,可以进行foreach循环以获取所有列名。像这样的

while($row = mysqli_fetch_assoc($query)){
    foreach($row as $key => $value){
        echo "$key=$value";
    }
}
如果要在数据库中获取表名,可以尝试以下方法

$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.创建表的列表 输出 您将有如下内容:

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结果以获得表格或创建多维数组:)

Hi。修改
选择
零件
选择t1.id作为id,t1.column作为column1,t3.column3作为column3,…
一个表中有超过15列,可能因表而异OK。这是不可能的。。。直接:)但是,你可以使用一些技巧。例如:分析表结构(
SHOW COLUMNS
),并通过添加
t1.id作为t1\u id,t1.c1作为t1\u c1,t2.id作为t2\u id,
动态创建SQL查询。这是一些ORM使用的技巧。我想将表名作为每个结果中的另一个数据。正如您在foreach循环中所说的,您希望从多个表中获取所有数据,但表名不多?这就是您想要实现的?是的,我需要从多个表(列可能不同)中获取所有数据,包括作为数据一部分的相应表名。好的,这不是问题。您知道需要选择哪些列吗?我的意思是选择用户、通行证、id、日期。。。。from因为有超过15列,并且可能与table tot table不同,所以我们需要选择所有列
<?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]);
  }
}
<?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,
    )
)