select * from A left join B on A.columnc=B.columnd
上面SQL返回的结果将包括A和B两列。
如果A和B有一些同名的列怎么办?
如何从PHP中检索值?
答案 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));