我正在尝试用可用的健身房制作一张地图,同时展示他们有什么运动。所以它看起来像这样:
锻炼时间。
例如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'] . ',
答案 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
在这种情况下,您需要一个循环,并在单个循环内跟踪堡垒是否发生变化。