虽然没有给我更多的培训师

时间:2017-09-06 22:50:11

标签: php mysql arrays while-loop

我正在尝试用可用的健身房制作一张地图,同时展示他们有什么运动。所以它看起来像这样:

  • 名称健身房
  • 空位:(数字)
  • 健身房的徽标图片
  • 锻炼时间。

  • 例如dumbel的图像

从锻炼时间到训练师的部分需要显示不止一个,我得到6个练习,6个训练师,6个和6个不同的练习图像显示。我将它们存储在数据库中;但他们没有出现。

这是我的代码:

    $sql = "SELECT * FROM forts";
    $result = $mysqli->query($sql);

    if ($result->num_rows > 0) {
        echo "[";

    $output = array();

    while($row = $result->fetch_assoc()) {

        $url = preg_replace("/^http:/i", "https:", $row['url']);

        $sqlmon = "SELECT * FROM gym_trainers WHERE fort_id = " . $row['id'];
        $resultmon = $mysqli->query($sqlmon);
        $mon = $resultmon->fetch_assoc();

        $sqlextra = "SELECT * FROM extrainfo WHERE fort_id = " . $row['id'] . "  ORDER BY last_modified DESC";
        $resultextra = $mysqli->query($sqlextra);
        $extra = $resultextra->fetch_assoc();

            array_push($output, '
                {
                "id": "' . $row['id'] . '",
                "name": "' . htmlspecialchars($row['name']) . '",
                "image": "' . $url . '",
                "team": "' . $team . '",
                "spots": ' . $extra['spots'] . ',
                "exer_time": ' . $mon['time_exerise'] . ',
                "trainer": "' . htmlspecialchars($mon['trainer_name']) . '",
                "exercise_id": ' . $mon['exercise_id'] . ',
                "lat": ' . $row['lat'] . ',
                "lng": ' . $row['lon'] . '

                }
            ');
    }

    echo implode(",", $output);

        echo "]";

我觉得这部分内容需要改变,但不知道是什么:

"exer_time": ' . $mon['time_exerise'] . ',
"trainer": "' . htmlspecialchars($mon['trainer_name']) . '",
"exercise_id": ' . $mon['exercise_id'] . ',

1 个答案:

答案 0 :(得分:2)

具体问题是您只从gym_trainers表中获取1条记录($resultmon->fetch_assoc()不在单独的循环中)。

更广泛的问题是您不使用连接。 3个单独的SQL查询可以写成

select *
from forts f
left join gym_trainers g on f.id=g.fort_id
left join extrainfo e on f.id=g.fort_id

在这种情况下,您需要一个循环,并在单个循环内跟踪堡垒是否发生变化。