2013-11-21 121 views
-1

我试图做一个简单的左连接,同时使用表的别名,从两个表中这种格式返回所有的值:如何使用表的别名与左连接返回MySQL数据和重复列

[Alias1] => Array 
    (
     [id] => 1 
     [city] => bay area 
     [state] => CA 
    ) 

[Alias2] => Array 
    (
     [id] => 1 
     [city] => san francisco 
     [baseball_team] => giants 

    ) 

这是我很简单mysqli_query:

$result = mysqli_query($sql, SELECT Alias1.id, Alias1.city, Alias1.state, Alias2.id, Alias2.city, Alias2.baseball_team FROM database.table1 AS Alias1 LEFT JOIN database.table2 AS Alias2 ON Alias1.id = Alias2.id) 

为了获得满意的结果...我用:

while($row = mysqli_fetch_array($result)) 
{ 
    $data[] = $row; 
} 
print_r($data);die(); 

问题:数据打印出这样:

[0] => Array 
     (
      [0] => 1 
      [id] => 1 
      [1] => bay area 
      [city] => bay area 
      [2] => CA 
      [state] => CA 
      [3] => 1 
      [4] => san francisco 
      [5] => giants 
      [baseball_team] => giants 
     ) 

其他信息:我本来试图让使用mysql_fetch_assoc($结果)的数据... ...但重复列不返回的。

+0

显示一些表结构,我相信我可以帮助...我会得到所需的数组使用PHP和离开查询的方式是...我只需要知道一些列名称... *没有多大帮助。 – amaster

+0

嘿!我更新了mysqli_query以显示列名。感谢您的帮助! – JustusKersey

+0

请参阅下面的答案,了解我将如何完成/已完成 – amaster

回答

0

相反的:

$data[] = $row; 

使用此形成你想要的数据数组:

$data['Alias1'] = array(
    "id"=>$row['id'], 
    "city"=>$row['1_city'], 
    "state"=>$row['state'], 
); 
$data['Alias2'] = array(
    "id"=>$row['id'], 
    "city"=>$row['2_city'], 
    "baseball_team"=>$row['baseball_team'], 
); 

,或者,如果你希望多行,你需要使用类似:

$data[] = array(
    "Alias1" => array(
     "id"=>$row['id'], 
     "city"=>$row['1_city'], 
     "state"=>$row['state'], 
    ), 
    "Alias2" => array(
     "id"=>$row['id'], 
     "city"=>$row['2_city'], 
     "baseball_team"=>$row['baseball_team'], 
    ), 
); 

注意: 如果您的城市值在你的两个表中是不同的,那么你应该使用一个别名,这样你就可以以不同的方式拉另一个。如果他们是相同的,我建议你不要在数据库中列出两次,因为这是复制数据并使数据库非规范化。

编辑: 您的查询应该是上面这些别名像

SELECT Alias1.id, Alias1.city AS 1_city, Alias1.state, Alias2.id, Alias2.city AS 2_city, Alias2.baseball_team FROM database.table1 AS Alias1 LEFT JOIN database.table2 AS Alias2 ON Alias1.id = Alias2.id 

见编辑答案。

+0

是的。城市的价值是不同的(只是更新后)。你的第一反应很好,除非城市价值不同(如你所问)。我在查询中使用别名。我很确定我正确地使用它们。它似乎像mysql_fetch_array,会有一些对别名的引用...但我没有看到任何? – JustusKersey

+0

@JustusKersey请在我的答案中查看我的编辑,以了解如何为具有相同名称的列使用别名。您可以拥有表格的别名,您可以使用列的别名。请参考此答案:http://stackoverflow.com/a/17715434/1707323 – amaster