我有一些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可以解决问题,但它们似乎都被弃用了。
非常感谢有关如何实现这一目标的任何建议。
答案 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 ”是您的列名。