6

可能重复:
如何使用 PHP 从具有多个同名列的 MySQL 行中获取结果?

我有两个表,它们共享相似的列名。

查询是:

SELECT a.name,b.name
FROM tablea a 
JOIN tableb b ON a.id = b.id

结果被放入一个数组中:

while ($row = mysql_fetch_array($results)){
   $aname = $row['name'];
}

一旦我添加到第二个表中,我注意到它$aname正在使用 tableb 的数据。

问题(s):如何存储两name列,$row['a.name']不起作用。我的猜测是我可能需要为查询中的每个结果加上别名。有什么建议么?我应该同样避免在未来给出列名吗?


I know mysql_* is deprecated. Save your energy.

4

2 回答 2

8

你的猜测是对的。您需要ALIAS为列创建一个,以便您可以唯一地获取它,

SELECT a.name Name1, b.name Name2
FROM tablea a 
JOIN tableb b ON a.id = b.id

那么你现在可以打电话了

$row['Name1']
于 2012-10-12T02:09:31.137 回答
7

有一种方法。

mysql_field_table()给定$result句柄和序号位置,将告诉您结果集字段的名称。结合mysql_field_name(),这应该是您需要的一切:

// Fetch the table name and then the field name
$qualified_names = array();
for ($i = 0; $i < mysql_num_fields($result); ++$i) {
    $table = mysql_field_table($result, $i);
    $field = mysql_field_name($result, $i);
    array_push($qualified_names, "$table.$field");
}

您可以将其包装到您自己的mysql_fetch_qualified_array函数中,例如,为您提供一个关联数组 keyed on "table.field"

function mysql_fetch_qualified_array($result) {
  ...
  // caching $qualified_names is left as an exercise for the reader
  ...
  if ($row = mysql_fetch_row($result)) {
    $row = array_combine($qualified_names, $row);      
  }
  return $row;
}
于 2012-10-12T02:16:12.937 回答