我想從兩個相關的MySQL表中構建一個json輸出。 我有一個「餐廳」和餐桌「菜餚」餐桌餐桌中的每個項目都有幾個相關項目在菜餚表中由ID引用。每個餐館商品ID都是Dishes表中的外鍵,即f_id。Json從PHP中的兩個mysql表中讀取
例如: 餐館的餐桌
+----+-------------+-----------+
| Id | Name | Misc Info |
+----+-------------+-----------+
| 1 | Restaurant1 | Some Info |
+----+-------------+-----------+
菜表
+----+------+-----------+-------------+
| Id | f_id | dish | description |
+----+------+-----------+-------------+
| 1 | 1 | DishName | DishDesc. |
| 2 | 1 | DishName2 | DishDesc. |
+----+------+-----------+-------------+
我想創建那些表輸出的JSON看起來像這樣:
{
"Restaurants": [
{
"name": "String content",
"misc info": "String content"
"Dishes": [
{
"dish": "String content",
"description": "String content"
},
{
"dish": "String content",
"description": "String content"
}
],
},
{
"name": "String content",
"misc info": "String content"
"Dishes": [
{
"dish": "String content",
"description": "String content"
},
{
"dish": "String content",
"description": "String content"
}
],
}
]
}
我使用PHP和mysql_query方法來找出邏輯,我計劃使用PDO生產版本。這是我迄今爲止嘗試過的代碼。
//Create Our Query
$srtResult = "SELECT * FROM Restaurants";
//Execute Query
$result=mysql_query($srtResult);
//Iterate Throught The Results
while ($row = mysql_fetch_assoc($result)) {
$count = $row['id'];
$srtResult2 = "SELECT * FROM Dishes WHERE id = $count";
$result2 = mysql_query($srtResult2);
while(mysql_num_rows($result2)){
$dishes = mysql_fetch_row($result2);
$dishList[] = Array(
"dish" => $dishes[3],
"description" => $dishes[4]);
}
$json['Restaurants'][] =
Array("Restaurants" => Array(
"name" => $row['name'],
"Dishes" => Array(
$dishList)));
}
header('Content-type: application/json');
echo json_encode($json);
我的問題是根據當前餐廳項目的菜餚不重複,每個餐廳項目,我從第一次館子的菜。 我認爲問題在於循環本身,因爲我在每個Restaurant包裝器中獲得了不同的int計數。任何幫助將不勝感激,我已經爲此工作了好幾天,並且已經耗盡了我的基本PHP知識。
感謝您的回覆,我試過了您的查詢。雖然它用於獲取我需要的數據,但是使用該查詢,我爲每個與其關聯的菜餚獲得了一排餐廳。當我把它放在這個循環中時,我會爲每個菜餚獲得一家新餐廳,但是,我需要爲每個餐館的菜品提供一系列菜餚。 – Anton
這裏是我現在使用的代碼 'while($ row = mysql_fetch_assoc($ result)){ \t $ count = $ row ['id']; \t而($行[ 'F_ID'] = $計數){ \t \t $ dishList [] =陣列( \t \t \t 「菜」=> $行[ '菜'], \t \t \t 「說明」 => $ row ['description']); \t} \t $ JSON [ '餐館'] [] = \t \t陣列( 「餐廳」=>數組( \t \t \t \t 「名稱」=> $行[ '名稱'], \t \t \t \t 「經度」=> $行[ '經度'], \t \t \t \t 「緯度」=> $行[ '緯度'], \t \t 「菜」=>數組( \t \t \t $ dishList))); }' – Anton
你從這個查詢中得到的結果是完全正確的。 所有你需要做的就是解析數組。 解析數組(處理內存中的數據)會更快,更高效,而不是在第一個查詢中爲每個結果發送新查詢。 – Dragos