如何在连接表上使用mysql_fetch_array,但列具有相同的名称

时间:2012-10-12 02:08:37

标签: php mysql sql

  

可能重复:
  How to fetch result from MySQL row with multiple same-name columns with PHP?

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

查询是:

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 depreciated. Save your energy.不起作用。我的猜测可能是我需要在查询中为每个结果添加别名。有什么建议? 我是否应该避免在将来提供列名


{{1}}

2 个答案:

答案 0 :(得分:8)

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

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

然后你现在可以打电话了

$row['Name1']

答案 1 :(得分: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函数中,例如,为您提供一个键入"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;
}