使用PHP从内部联接后的第二个表访问值

使用PHP从内部联接后的第二个表访问值,php,mysql,Php,Mysql,我试图在id上连接两个表,然后用键值填充一个空数组表2还有一个我想使用的城市名称列 但是,在使用内部联接将两个表连接到它们的id之后,我似乎无法从第二个表访问city\u name值(但是从第一个表获取值很好) 这是我的密码: $city_list = array(); $i = 0; $q = "SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.city_id"; $res = $mysql_query($q); whil

我试图在
id
上连接两个表,然后用键值填充一个空数组<代码>表2还有一个我想使用的
城市名称

但是,在使用内部联接将两个表连接到它们的
id
之后,我似乎无法从第二个表访问
city\u name
值(但是从第一个表获取值很好)

这是我的密码:

$city_list = array();
$i = 0;

$q = "SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.city_id";
$res = $mysql_query($q);

while($row = mysql_fetch_assoc($res) {
    $city_list[$i]['id'] = $row['id']; // returns the id from table1, which is also identical to the city_id from table2
    $city_list[$i]['population'] = $row['city_population']; // returns the city_population value from table1 
    $city_list[$i]['name'] = $row['city_name']; // returns null, even though the value exists in table2
    $i++;
}

打印
$city\u列表时,我会得到相应的
id
population
值,但是
name
键的值为
null
,即使我在
表2

中有城市名称,也可以使用别名选择列名,以便您可以根据需要访问这两个列名。例如,将查询更改为:

SELECT *, table2.user_name as table2_user_name 
FROM table1 
INNER JOIN table2 ON table1.id=table2.city_id

如果不需要所有数据,最好不要使用
*
。它往往会导致更多的错误和更困难的维护。

您可以使用别名选择列名,以便可以根据需要访问这两个列名。例如,将查询更改为:

SELECT *, table2.user_name as table2_user_name 
FROM table1 
INNER JOIN table2 ON table1.id=table2.city_id

如果不需要所有数据,最好不要使用
*
。它往往会导致更多的错误和更困难的维护。

只需选择您真正需要的列即可

SELECT table1.id, table1.city_population, table2.city_name 
FROM table1 
INNER JOIN table2 ON table1.id=table2.city_id

只需选择您真正需要的列

SELECT table1.id, table1.city_population, table2.city_name 
FROM table1 
INNER JOIN table2 ON table1.id=table2.city_id

请发布示例数据。不确定mysql为什么会这样做,因为带有两个表的
select*
将提取结果集中的所有列。通过将mysql命令行与您的查询一起使用,可以轻松地进行测试。如果id不匹配,它将不会返回任何行(因为您正在进行内部联接)。答案已经给出,但我不理解的是您的表结构。你是说你只需要将两个表连接在一起就可以得到一个城市的id、人口和名称吗?为什么所有这些属性都不在城市表中?另一张桌子在做什么?当你提供非特定信息时,你会得到非特定的答案。当您从两个不同的表中获取数据时,键也会出现问题,这两个表都有相同名称的列。您可以发布这两个表的架构和一些示例数据吗?@gview您在哪里看到了相同名称的列?请发布示例数据。不确定您的mysql为什么会这样做,因为
select*
有两个表,将提取结果集中的所有列。通过将mysql命令行与您的查询一起使用,可以轻松地进行测试。如果id不匹配,它将不会返回任何行(因为您正在进行内部联接)。答案已经给出,但我不理解的是您的表结构。你是说你只需要将两个表连接在一起就可以得到一个城市的id、人口和名称吗?为什么所有这些属性都不在城市表中?另一张桌子在做什么?当你提供非特定信息时,你会得到非特定的答案。当您从两个不同的表中提取数据时,键也会出现问题,这两个表都有相同名称的列。您可以发布这两个表的架构和一些示例数据吗?@gview您在哪里看到了相同名称的列?两个查询将返回相同的结果。TY对于注释更改的答案。两个查询将返回相同的结果注释的result.TY更改了答案。