php - 如何通过循环查询结果来制作数组数组

标签 php mysql arrays json

我有一个关于游戏的调查,我有一个表格用于游戏数据,另一个表格用于人们的回答。

我想输出一个 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 回应它的结果,但我不确定如何应用它

  1. 在哪里放置foreach
  2. 如何根据每个游戏id选择并得到结果
  3. 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 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.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";

您应该将您的 else 语句内容更改为:

} else {
    foreach($answer as $value) {
        $array_resp[]=[
            'id' => $value->a_id,
            'username' => $value->a_name,
            'g1' => ['name'=>$value->g1_name, 'year'=>$value->g1_year],
            'g2' => ['name'=>$value->g2_name, 'year'=>$value->g2_year],
            'g3' => ['name'=>$value->g3_name, 'year'=>$value->g3_year],
            ];
    }
    $response->getBody()->write(json_encode($array_resp));
}

关于php - 如何通过循环查询结果来制作数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763953/

相关文章:

mysql - 在mysql中使用group by聚合5分钟时间戳间隔

php - 从arduino获取数据到数据库(mysql或任何)

javascript - 搜索数组,按与查询的相关性显示结果

java:在二维数组中搜索最小值并返回最小值的位置(行和列)

php - 在sql中添加两列的值

php - 如何在 PHP 中拆分不同的日期格式?

mysql - ".save"仅在数据库中插入空值

arrays - Jenkins -Gradle -Java

PHP/MySQL 搜索不工作

php - mysql合并来自不同行的三个不同值