【问题标题】:how to mysql_fetch_array on joined tables, but columns have same name [duplicate]如何在连接表上使用mysql_fetch_array,但列具有相同的名称[重复]
【发布时间】:2012-10-12 02:08:37
【问题描述】:

可能重复:
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 的数据。

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


I know mysql_* is deprecated. Save your energy.

【问题讨论】:

  • 嘿,你知道 mysql_* 已被弃用吗?抱歉,无法抗拒。
  • 不,我没有看到任何红框,也不知道你在说什么

标签: php mysql sql


【解决方案1】:

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

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

那么你现在可以调用

$row['Name1']

【讨论】:

  • 我不知道你可以不用AS来别名
  • 我是这么想的……所以没有办法用表别名代替?
  • @JohnWoo 感谢您的帮助!我实际上注意到这是 stackoverflow.com/questions/1416980/… 的副本
【解决方案2】:

有办法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多