我有两个表,它们共享相似的列名.
查询是:
SELECT a.name,b.name
FROM tablea a
JOIN tableb b ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)
结果放入一个数组:
while ($row = mysql_fetch_array($results)){
$aname = $row['name'];
}
Run Code Online (Sandbox Code Playgroud)
一旦我在第二个表中添加,我注意到$aname正在使用tableb的数据.
问题:如何存储两name列,$row['a.name']不起作用.我的猜测可能是我需要在查询中为每个结果添加别名.有什么建议?我是否应该避免将来给出列名?
I know mysql_* is deprecated. Save your energy.
你的猜测是正确的.您需要ALIAS为列创建一个,以便您可以唯一地获取它,
SELECT a.name Name1, b.name Name2
FROM tablea a
JOIN tableb b ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)
那你现在可以打电话了
$row['Name1']
Run Code Online (Sandbox Code Playgroud)
有一种方法.
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");
}
Run Code Online (Sandbox Code Playgroud)
您可以将它包装到您自己的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;
}
Run Code Online (Sandbox Code Playgroud)