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

时间:2011-08-14 18:22:15

标签: php mysqli

我有一些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循环内部的表,因为它可能在2个表之一。

我看到有一些旧的mysql函数,比如mysql_field_table和mysql_tablename可以解决问题,但它们似乎都被弃用了。

非常感谢有关如何实现这一目标的任何建议。

3 个答案:

答案 0 :(得分:0)

使用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 /*...*/ ');

答案 1 :(得分:0)

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

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

在php中你可以找到字符串t1和t2并相应地做东西。

答案 2 :(得分:0)

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

$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]等...

或者通过{i>列名称或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 ”和“ c_name2 ”是您的列名。