php - 如何将变量循环到sql调用中
问题描述
我想teacher_id
从数据库中获取所有内容,然后teacher_id
在另一个 sql 中循环每个。
我得到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
。现在我想使用该数组,然后使用每个数组执行另一个 sql,ID
这样我就可以计算每个老师有多少初学者。
我得到的是
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
. 我正在寻找这个结果:
Teacher | Count
Liv | 3 Beginner, 1 Novice
Tee | 1 Open champ
Mike | 1 Major
这样,我可以将计数 (3) 放入一个变量中,并将 (1) 放入一个变量中以在 else where 中使用。
完整代码:
// 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 }} ?>
也许有更好的方法来做到这一点。但我真的需要帮助,我已经被困了好几天了。我希望我的问题有意义
解决方案
您可以使用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注入
使用准备好的语句来防止这个问题使用
推荐阅读
- python - Pytorch:为什么 print(model) 不显示激活函数?
- swift - 如何自定义推送通知?
- python - 按数据框分组,条件是两个字符串之间的相似性度量
- c - 头变量归零
- powerbi - 我的 Power BI 查询(使用参数)有什么问题?
- javascript - stoppropagation 在 Angular 8 中没有按预期工作
- reactjs - 使用动作创建者中的状态反应 redux
- c# - unity2d 中的 WASD 运动
- javascript - 有没有办法从 reactjs 项目中删除或隐藏警告?
- javascript - 如何在不滚动到顶部的情况下调用 history.replace?