【问题标题】:fetching rating data from database to JSON array in php rest api在php rest api中从数据库中获取评级数据到JSON数组
【发布时间】:2017-12-23 09:04:27
【问题描述】:

我正在开发一个 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 视图中.注意:我已经完成了所有计算。

现在,当我将 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 数组中,它不会从数据库中提取 average_ratingreview_count。它只显示 null
但是当我在 WHERE 子句中将 stu_id 定义为 2 或 3 时,它不仅在定义的 stu_id 中而且在其他 id 中显示相同的 average_rating 和相同的评论。 但我想要每个学生的准确平均分/评论。

我认为,问题在于查询。那么,谁能帮帮我???

【问题讨论】:

  • 代码中似乎有错误。为什么
    标签喜欢?你应该回显
  • 您对SQL Injections 持开放态度,应该真正使用Prepared Statements 而不是连接您的查询。特别是因为您根本没有逃避用户输入!
  • 查询有问题....您能帮帮我吗,先生?
  • 向我们展示您的数据库的结构。当我看到view_rating.total_pointsview_rating2.total_points2view_rating3.total_points3 等时,我感觉数据库设计可能是个问题……

标签: php mysql json api


【解决方案1】:

您的 $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 的数据)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2018-07-01
    相关资源
    最近更新 更多