2013-02-21 33 views
0

我有两个表:PHP(或jQuery,如果需要的话):将其他表格中的相关MySQL记录输出为JSON?

表1:

Make  Model 1 ID  Model 2 ID  Model 3 ID 
----  ----------  ----------  ---------- 
Ford  1    4    7 
Chevrolet 2    3    5 
Dodge  6    8    9 

表2:

ID   Model   Engine 
----  -----   ------ 
1   F-150   Triton V8 
2   Silverado  Vortec V8 
3   Corvette   LS9 V8 
4   Fusion   Duratec I4 
5   Camaro   LSA V8 
6   Ram    Hemi V8 
7   Mustang   Modular V8 
8   Grand Caravan Pentastar V6 
9   Challenger  Hemi V8 

我想输出链接数据(就是你怎么说我?对于使用PHP的JSON,使输出看起来像这样(或者如果我的JSON语法错误,那么它的内容非常相似):

{ 
    [ 
    { 
    "make": "Ford", 
    "models": 
    [ 
     { 
     "ID": "1", 
     "info": 
     { 
     "model": "F-150", 
     "engine": "Triton V8", 
     } 
     }, 
     { 
     "ID": "4", 
     "info": 
     { 
     "model": "Fusion", 
     "engine": "Duratec I4", 
     } 
     }, 
     { 
     "ID": "7", 
     "info": 
     { 
     "model": "Mustang", 
     "engine": "Triton V8", 
     } 
     }, 
    ] 
    }, 
    { 
    "make": "Chevrolet", 
    "models": 
    [ 
     { 
     "ID": "2", 
     "info": 
     { 
     "model": "Silverado", 
     "engine": "Vortec V8", 
     } 
     }, 
     { 
     "ID": "3", 
     "info": 
     { 
     "model": "Corvette", 
     "engine": "LS9 V8", 
     } 
     }, 
     { 
     "ID": "5", 
     "info": 
     { 
     "model": "Camaro", 
     "engine": "", 
     } 
     }, 
    ] 
    }, { 
    "make": "Dodge", 
    "models": 
    [ 
     { 
     "ID": "6", 
     "info": 
     { 
     "model": "Ram", 
     "engine": "Hemi V8", 
     } 
     }, 
     { 
     "ID": "8", 
     "info": 
     { 
     "model": "Grand Caravan", 
     "engine": "Pentastar V6", 
     } 
     }, 
     { 
     "ID": "9", 
     "info": 
     { 
     "model": "Challenger", 
     "engine": "Hemi V8", 
     } 
     }, 
    ] 
    } 
    ] 
} 

问题是,你如何使用PHP做到这一点?感谢您花时间阅读,直到这篇相当长的文章结束,并且预先感谢您尝试提出解决方案。

如果你想建议使用jQuery的解决方案,那也可以。

+1

您创建一个PHP数组,从数据库中的数据来填充它像你想它,然后将其转换成JSON 'json_encode'。 – 2013-02-21 21:45:21

+0

你创建一个数组,将其转换为json,并将它回显并且死掉'header(“Content-type:application/json”); echo json_encode($ array);死;' – Popnoodles 2013-02-21 21:45:46

回答

2

您的数据是错误的。试试这个结构来代替:

MakeID Make 
------ ---- 
1  Ford 
2  Chevrolet 
3  Dodge 

ModelID MakeID Model   Engine 
------- ------ -------------- ------ 
1  1  F-150   Triton V8 
2  2  Silverado  Vortec V8 
3  2  Corvette  LS9 V8 
4  1  Fusion   Duratec I4 
5  2  Camaro   LSA V8 
6  3  Ram   Hemi V8 
7  1  Mustang  Modular V8 
8  3  Grand Caravan Pentastar V6 
9  3  Challenger  Hemi V8 

现在你可以做这样的事情:

$sql = mysql_query("select * from `table1` join `table2` using (`MakeID`)"); 
$out = Array(); 
while($car = mysql_fetch_assoc($sql)) { 
    if(!isset($out[$car['MakeID']])) { 
     $out[$car['MakeID']] = Array("make"=>$car['Make'],"models"=>Array()); 
    } 
    $out[$car['MakeID']]['models'][] = Array(
     "ID"=>$car['ModelID'], 
     "info":Array(
      "model"=>$car['Model'], 
      "engine"=>$car['Engine'] 
     ) 
    ); 
} 
$out = array_values($out); 
echo json_encode($out); 
+0

这也可以。 – LesPaul 2013-02-26 21:30:03

相关问题