2011-08-14 67 views
1

这是非常基本的问题,我想。基本上我有一些PHP/MySQL代码从多个不同的表中抽取数据(使用Inner Joins)。它看起来是这样的:从一个从多个表中抓取的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_field_table和mysql_tablename这样的旧mysql函数可以做到这一点,但它们似乎都被弃用了。

希望有关如何完成此任何建议。

谢谢! -John

回答

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

你可以为每个表中的特殊标识,而不是使用*

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

选择数据和PHP内,你可以查找字符串t1和t2,并相应做的东西。

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

或通过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”是您的列名称。

相关问题