如何使用PHP从多个同名列中获取MySQL行的结果?

时间:2009-09-13 06:05:41

标签: php sql mysql

select * from A left join B on A.columnc=B.columnd
上面SQL返回的

结果将包括A和B两列。

如果A和B有一些同名的列怎么办?

如何从PHP中检索值?

5 个答案:

答案 0 :(得分:18)

您可能希望在查询中更明确。这样您就可以为列提供别名:

SELECT
  A.foo as a_foo,
  B.foo as b_foo
FROM A
LEFT JOIN B ON A.columnc = B.columnd

答案 1 :(得分:7)

答案实际上在PHP documentation

“如果结果的两列或多列具有相同的字段名称,则最后一列优先。要访问同名的其他列,您需要使用数字索引访问结果mysql_fetch_row()或添加别名。请参阅有关别名的mysql_fetch_array()说明中的示例。“

当您坚持在select语句中使用star时,Especialy mysql_fetch_array()似乎是最佳候选者:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

然后你可以通过$row[name]$row[col_number]的ambambous字段来引用不明确的字段,但这限制了代码的可移植性(也许MySQL的下一个版本将返回不同的列订购?)。推荐的解决方案是重写您的查询并列出所有必需的字段,而不是使用星形,而不是使用星号 - 使用别名。

答案 2 :(得分:2)

您应该在select语句中使用column aliases

答案 3 :(得分:1)

在ResultSet对象的Java + MySQL中,如果您的查询类似于“SELECT a.id,b.id”,您可以使用例如getString(“a.id”)和getString(“b.id”)。从a,b“

如果在PHP中有这样的东西,我不知道。

此致

答案 4 :(得分:1)

这可能对某些人有用:因为我使用了一些模板,所以每次都不能轻易使用别名,我希望关联数组易于使用。 CREDIT PILCROW在how to mysql_fetch_array on joined tables, but columns have same name上的答案,但在MySQLi:

$qualified_names = array();
for ($i = 0; $i < mysqli_num_fields($result); ++$i) {
    $fieldinfo=mysqli_fetch_field_direct($result,$i);
    $table = $fieldinfo->table;
    $field = $fieldinfo->name;
    $qualified_names["$table.$field"]="$table.$field";
}
$newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM));