从从多个表中抓取的mysql查询中获取一行的表名


Getting the table name of a row from a mysql query that grabs from multiple tables

我有一些PHP/MySQL代码从多个不同的表中提取数据(使用内连接)。它看起来像这样:

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);
while ($row = mysqli_fetch_array($data)) {
   echo $row[1];
}

代码很简单,但是我想做的是在while循环中返回表的每一行,因为它可以在两个表中的一个中。

我看到有一些旧的mysql函数,如mysql_field_table和mysql_tablename,可以做到这一点,但它们似乎都被弃用了。

您可以为每个表选择带有特殊标识符的数据,而不是使用*

select table1.row1 as t1r1, table2.row1 as t2r1,..... from .....

在php中,你可以查找字符串t1和t2,然后做相应的操作

您可以做的是从结果表(希望现在包含两个表的信息)中回显多个字段。

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);
while ($row = mysqli_fetch_array($data)) 
{   
  echo $row[1] . " " . $row[2];
}

…然后是$row[3]

或通过列名AS提供的别名访问列名/字段。

$query = "SELECT * FROM table1 INNER JOIN table2 USING (key)";
$data = mysqli_query($dbc, $query);
while ($row = mysqli_fetch_assoc($data)) 
{   
  echo $row["c_name1"] . " " . $row["c_name2"];
}

, <我> c_name1 "answers"<我> c_name2 "是你的列名。

使用AS关键字重命名所有列

$select_clause = '';
$tables = array('tblA', 'tblB');
foreach($tables as $tbl) {
    mysql_query('SHOW COLUMNS FROM ' . $tbl);
    while ($row = mysql_fetch_assoc())
        $select_clause .= '`'.$tbl.'`.`'.$row['Field'].'` AS `'.$tbl
           .'_'.$row['Field'].'`,';
}
$select_clause = substr($select_clause, 0, -1);
mysql_query('SELECT '.$select_clause.' FROM /*...*/ ');