【发布时间】:2017-08-18 19:39:41
【问题描述】:
我有一个关于游戏的调查,我有一个用于游戏数据的表格,另一个用于人们的答案。
我想以 Json 格式输出一个数组,以在数组中包含 3 个最喜欢的游戏名称及其年份中的每一个的答案。
预期输出
[
{
"id": "1",
"username": "userX",
"g1": {"name": "game1", "year": "1991"},
"g2": {"name": "game2", "year": "1992"},
"g3": {"name": "game3", "year": "1993"},
}
]
我尝试过的
$sql = "SELECT * FROM tbAnswers AS answer INNER JOIN tbgames AS game ON answer.g1 = game.id";
try {
$db = new db();
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->execute();
$answer = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
if(empty($answer)) {
$response->getBody()->write
('
{
"error":
{
"status":"400",
"message":"Invalid Request"
}
}');
} else {
$response->getBody()->write(json_encode($answer));
}
} catch(PDOException $e) {
$response->getBody()->write
('
{
"error":
{
"message":'. $e->getMessage() .'
}
}');
}
当前输出
[
{
"id": "1",
"username": "userX",
"name": "game1",
"year": "1991"
}
]
我认为我应该在其他地方做一个 foreach 来完成每场比赛并根据答案中的 id 回显结果,但我不知道如何应用它
- foreach 的放置位置
- 如何根据每个游戏id选择并获取结果
- json格式怎么做
我确定这不是我的做法,这就是我试图在 else 中回显数据的方式
echo"[";
echo"\n{";
echo"\n";
echo '"id:"'.' "'.$answer[0]->id.'",';
echo"\n";
echo"}\n";
echo"]";
这是我的表格结构
tbGames
id , name , year
1 , 'game1' , '1991'
2 , 'game2' , '1992'
3 , 'game3' , '1993'
4 , 'game4' , '1994'
tbAnswers
id , name , g1 , g2 , g3
1 , userX , 1 , 2 , 3
2 , userY , 3 , 1 , 4
3 , userZ , 1 , 1 , 2
4 , userW , 2 , 3 , 4
【问题讨论】:
-
首先,您的 sql 查询应该是这样的:SELECT * FROM tbAnswers AS answer INNER JOIN tbgames AS game1 ON answer.g1 = game1.id INNER JOIN tbgames AS game2 ON answer.g2 = game2。 id INNER JOIN tbgames AS game3 ON answer.g3 = game3.id
-
你需要改变你的查询而不是
answer.g1使用answer.id这一定是得到你需要的数据 -
@perodriguezl 你能告诉我在哪里放置foreach如何根据每个游戏ID选择和获取结果如何以json格式进行
-
用这个 $sql = "SELECT answer.id a_id, answer.name a_name, game1.id g1_id, game1.name g1_name, game1.year g1_year, game2.id g2_id, game2 替换你的 SQL 查询.name g2_name, game2.year g2_year, game3.id g3_id, game3.name g3_name, game3.year g3_year FROM tbAnswers AS answer INNER JOIN tbgames AS game1 ON answer.g1 = game1.id INNER JOIN tbgames AS game2 ON answer.g2 = game2.id INNER JOIN tbgames AS game3 ON answer.g3 = game3.id";并显示新的(完整)输出
-
@perodriguezl 我之前确实尝试过,它显示的输出与我在问题中发布的当前输出相同,即使我添加了所有内部连接