我正在开发一个 api ,它会为每个学生提供评分值。这是一个两阶段评级系统Click Here。在 STAGE-I UI视图中,学生列表会显示学生姓名和评分。要给学生评分,可以点击评分星和评分。 STAGE-II 出现了一些评级类别。每个学生的评分取决于这部分。每个类别的评级值为 Sum_of_Rating_value / rating_numbers 。在对所有类别(或其中2/3的评级)进行评级后,结果将重新评为 Sum_of_ALL_Category / Category_number 并置于 STAGE-I 学生列表UI视图中。 N.B .:我做了所有的计算。
现在,当我将QUERY中的数据称为:
<?php
$connection = mysqli_connect("localhost","root","pass","DB_NAME") or die("Error " . mysqli_error($connection));<br><br>
$stu_id=$_POST['stu_id'];<br><br>
$sql_query = " SELECT *, FORMAT(((SELECT SUM(view_rating.total_points+view_rating2.total_points2+view_rating3.total_points3+view_rating4.total_points4+view_rating5.total_points5) FROM view_rating,view_rating2,view_rating3,view_rating4,view_rating5) / (SELECT SUM(view_rating.rating_number+view_rating2.rating_number2+view_rating3.rating_number3+view_rating4.rating_number4+view_rating5.rating_number5) FROM view_rating,view_rating2,view_rating3,view_rating4,view_rating5) ),1) as average_rating,(select count(review) from review WHERE stu_id=14 )as review_count FROM student_info WHERE stu_id='$stu_id' ";<br><br>
$user_array=array();<br>
$main_array=array(); <br><br>
$result = mysqli_query($connection,$sql_query);<br>
while($row =mysqli_fetch_assoc($result))
{<br>
$user_array['stu_id']=$row['stu_id'];<br>
$user_array['name']=$row['name'];<br>
$user_array['mobile']=$row['mobile'];<br>
$user_array['email']=$row['email'];<br>
$user_array['gender']=$row['gender'];<br>
$user_array['Dept']=$row['Dept'];<br>
$user_array['blood_group']=$row['blood_group'];<br>
$user_array['average_rating']=$row['average_rating'];<br>
$user_array['review_count']=$row['review_count'];<br>
array_push($main_array,$user_array);<br>
}<br><br>
$mainarray=array("STUDENTS"=>$main_array);<br>
$jsonData = json_encode($mainarray, JSON_PRETTY_PRINT);<br>
echo $jsonData;<br>
?>
在JSON数组中,它不会从DB中提取 average_rating 和 review_count 。它只显示 null 。
但是当我在WHERE子句中将stu_id定义为2或3时,它不仅在定义的stu_id中而且在其他id中显示相同的average_rating和相同的查看。
但我希望每个学生都能得到精确的平均值/评价。
我认为,问题出在“查询”上。所以,任何人都可以帮助我吗???
答案 0 :(得分:0)
你的$ sql_query真的很难读;我会把它分成小块。
为什么(select count(review) from review WHERE stu_id=14 )as review_count
作为查询的一部分?
神奇数字14有什么特别之处?在代码中使用魔术数字通常是一个坏主意。谁是学生14?为什么这个数字是硬编码而不是使用$ stu_id或其他变量?这可能与您未获得review_count的原因有关。
如果您在将此更改为WHERE stu_id=2
或WHERE stu_id=3
时收到了review_count,则可能是因为review
包含学生2
和3
的条目但不适用于学生14
,或者因为在您进行查询时$ stu_id为2
或3
。我想是后者。
由于您的整体查询都包含在最外层FROM student_info WHERE stu_id='$stu_id'
中,因此它应该仅为ID为$ stu_id的学生获取信息。如果该id不等于14,则没有学生14的信息,因此当您尝试运行学生14上的审核计数代码时,它找不到任何内容(您正在搜索已经过滤到的数据集)只有学生$ stu_id的数据。
我不确定这是因为代码很难阅读,因为它目前的结构,但我猜这是一个很好的故障排除起点。