如何在联接表时使用mysql_fetch_array,但列名相同。

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的数据。

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


我知道mysql_*已被弃用,请节省精力。


1
嘿,你知道mysql_*已经被弃用了吗?抱歉,我忍不住要说一下。 - Geoff Montee
我没有看到任何红色的盒子,也不知道你在说什么。 - d-_-b
2个回答

8

你的猜测是正确的。你需要为列创建一个别名(ALIAS),这样你就可以唯一地获取它了。

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

然后,现在您可以调用。
$row['Name1']

2
我不知道你可以在不使用“AS”关键字的情况下创建别名。 - Asad Saeeduddin
这正是我所想的...那么没有办法使用表别名吗? - d-_-b
@JohnWoo 谢谢你的帮助!我实际上注意到这是一个重复的问题 https://dev59.com/qXM_5IYBdhLWcg3wWRoF?rq=1 - d-_-b

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接