2012-07-31 121 views
1
A table : id, name 
B table : id, a_id, name 

1A:NBMySQL的 - 1:N的关系

我要选择像下面

array( 
    0 => aID_1, 
    aName_1, 
    array (
     bName_1, 
     bName2 , .v.v.v 
    ), 
    ... 
    ... 
) 

我可以只在做B中与导致记录和相关信息查询?

+0

你有基数1:N,是否有必要建立2个表?不能你吸收它? – jcho360 2012-07-31 12:45:20

回答

1

是这样的:

SELECT * FROM tableA as a LEFT JOIN tableB as b ON a.id = b.a_id; 
+0

所以我需要操纵结果得到我想要的结构 – Chameron 2012-07-31 12:50:54

+0

@Chameron,那么,在这种情况下,似乎上面已经得到了更多的回答:) – 2012-07-31 12:52:46

+0

非常感谢你! – Chameron 2012-07-31 13:14:20

1
$qry = mysql_query ("SELECT a.id, a.name, b.name as b_name FROM A LEFT JOIN B on A.id = B.a_id"); 
$data = array(); 
while ($r = mysql_fetch_rows($qry)) 
{ 
    if (!array_key_exists($r["id"], $data) 
    { 
     $data[$r["id"]] = array (
      "id" => $r["id"], 
      "name" => $r["name"], 
      "b" => array() 
     ); 
    } 

    $data[$r["id"]]["b"][] = $r["b_name"]; 
} 

,现在你可以通过迭代的foreach:

foreach ($data as $d) 
{ 
    print_r($d); 
} 
+0

我们可以只使用mysql吗? – Chameron 2012-07-31 12:50:16

+1

由于您加入了2个表,因此您可以获得包含一条SQL语句的所有结果。为了在PHP数组中获得正确的结果,您需要使用PHP。 – take 2012-07-31 12:51:26

+0

非常感谢你! – Chameron 2012-07-31 13:14:34