在php rest api中从数据库获取评级数据到JSON数组

时间:2017-07-18 13:07:46

标签: php mysql json api

我正在开发一个 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和相同的查看。
但我希望每个学生都能得到精确的平均值/评价。

我认为,问题出在“查询”上。所以,任何人都可以帮助我吗???

1 个答案:

答案 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=2WHERE stu_id=3时收到了review_count,则可能是因为review包含学生23的条目但不适用于学生14,或者因为在您进行查询时$ stu_id为23。我想是后者。

由于您的整体查询都包含在最外层FROM student_info WHERE stu_id='$stu_id'中,因此它应该仅为ID为$ stu_id的学生获取信息。如果该id不等于14,则没有学生14的信息,因此当您尝试运行学生14上的审核计数代码时,它找不到任何内容(您正在搜索已经过滤到的数据集)只有学生$ stu_id的数据。

我不确定这是因为代码很难阅读,因为它目前的结构,但我猜这是一个很好的故障排除起点。