我想从数据库中获取所有teacher_id
,然后在另一个sql中循环每个teacher_id
。
我得到这样的teacher_id
:
$teachersql = "SELECT DISTINCT teacher_name, teacher_id FROM `dancers` WHERE school = '$ownerSchool'";
$teacherres = mysqli_query($con,$teachersql);
while($chartData2=mysqli_fetch_array($teacherres)){
$teacher_Id = $chartData2['teacher_id'];
}
?>
我得到了ID
的数组。现在,我想使用该数组,然后使用每个ID
执行另一个sql,这样我就可以计算出每个老师有多少个初学者。
我得到的是
Teacher | Level
Liv | Beginner
Liv | Beginner
Liv | Novice
Tee | Open champ
Mike | Major
Liv | Beginner
但是我想要的是对每个老师进行一次sql调用,然后计算该老师的初学者人数。
所以如果我做$teachersql2 = "SELECT * FROM
舞蹈演员WHERE teacher_id = '$teacher_Id'";
我希望它为$teacher_id array
中的每个老师ID打电话。
并且正在寻找这个结果:
Teacher | Count
Liv | 3 Beginner, 1 Novice
Tee | 1 Open champ
Mike | 1 Major
这样,我可以将count(3)放入变量,将(1)放入变量以在其他位置使用。
完整代码:
// GET TEACHERS
$teachersql = "SELECT DISTINCT teacher_name, teacher_id FROM `dancers` WHERE school = '$ownerSchool'";
$teacherres = mysqli_query($con,$teachersql);
while($chartData2=mysqli_fetch_array($teacherres)){
$teacher_Id = $chartData2['teacher_id'];
$teacherNames = $chartData2['teacher_name'];
$teacherNames = str_replace(' ', '', $teacherNames);
$teacherNames = str_replace('.', '', $teacherNames);
$var2 = 'data';
$newVar2 = $var2 . $teacher_Id . $teacherNames;
$teachersql2 = "SELECT * FROM `dancers` WHERE teacher_id = '$teacher_Id'";
$teacherres2 = mysqli_query($con,$teachersql2);
while($chartData3=mysqli_fetch_array($teacherres2)){
$preB_percent = $chartData3['current_lvl'];
?>
//CHART BY TEACHERS
var <?php echo $newVar2; ?> = google.visualization.arrayToDataTable([
['<? $total_students; ?> Pre-Beginners', '<?php $lvl_beginner; ?> Beginners', '<?php $lvl_advanced; ?> Advanced Beginners', '<?php echo $lvl_novice; ?> Novices', '<?php echo $lvl_prizeWinner; ?> Prize Winners', '<?php $lvl_prelim; ?> Prelim Champions', '<?php echo $lvl_open; ?> Open Champions', '<?php echo $lvl_major; ?> Majors'],
['<?php echo $preB_percent; ?>', '<?php echo $beginner_percent; ?>', '<?php echo $advanced_percent; ?>', '<?php echo $novice_percent; ?>', '<?php echo $prizeWinner_percent; ?>', '<?php echo $prelim_percent; ?>', '<?php echo $open_percent; ?>', '<?php echo $major_percent; ?>']
]);
<?php }} ?>
也许有更好的方法可以做到这一点。但是我真的需要帮助,我已经待了好几天了。希望我的问题有意义
答案 0 :(得分:0)
您可以使用group by
将两个查询合并为一个查询,例如SQL波纹管:
SELECT teacher_name, current_lvl, count(teacher_id) as count
FROM dancers
WHERE school = '$ownerSchool'
GROUP BY current_lvl, teacher_id
ORDER BY teacher_name ASC
产生的结果将类似于以下模式:
Teacher | Level | Count
Liv | Beginner | 3
Liv | Novice | 1
Tee | Open champ | 1
Mike | major | 1
您可以使用php代码合并结果以生成数据图表
$results = mysqli_query($con, $teacher_sql);
$last_teacher_name = "";
$current_index;
$chart_data = [];
while($row = mysqli_fetch_array($results)) {
$teacher_name = $row["teacher_name"];
$current_lvl = $row["current_lvl"];
$total_dancers = $row["count"];
if ($teacher_name != $last_teacher_name ) {
$chart_data += ["teacher_name" => $teacher_name];
$last_teacher_name = $teacher_name;
$current_index = count($chart_data) - 1;
}
$chart_data[$current_index]["current_lvl"] = $current_lvl;
$chart_data[$current_index]["count"] = $total_dancers;
}
注意: 注意@Dharman插入的sql注入很重要
使用Prepared Statements来防止此问题的使用