如何在 PHP Codeigniter 中处理 SQL 查询数据

Posted

技术标签:

【中文标题】如何在 PHP Codeigniter 中处理 SQL 查询数据【英文标题】:How to Process SQL Query data in Php Codeigniter 【发布时间】:2019-01-16 05:41:35 【问题描述】:

注意:这是一个特定的问题,需要回答。

这是我要从中获取数据的数据库表。

我的数据库查询

select std.reg_id, std.name as student_name, r.marks as obtain_marks, q.ques_marks as total_marks,  cat.name as category_name, q.cat_id, course.name as course_name 
FROM tbl_result as r JOIN tbl_question as q on q.id = r.ques_id 
JOIN tbl_category as cat on cat.id = q.cat_id
JOIN tbl_batch_assigned_courses as assign on assign.id = r.course_offered_id 
JOIN tbl_courses as course on course.id = assign.course_id 
JOIN tbl_student as std on std.id = r.student_id 
WHERE r.student_id = 168 AND r.course_offered_id = 46

你看到了吗?有很多类别,每个类别都有获得和总分

现在我想要的是从该表中获取数据(已经做过),并将其显示在视图上(已经做过)

但除此之外,我还想展示每个类别的总分和总分,以及两者的总和。

例如:

沟通技巧总分15分 总分25分。

(总获得数 / 总问号)* 100 ~= 类别 1 的 [某个值]。

但我想要所有类别的上述表达式(可以是任何数字)。

php 应该自动完成,只需传递学生和课程 ID。

我的控制器代码:

public function show_single_student_report()
            $go = $this->input->post("submit_go");
            if(isset($go)) 
                $program_id = $this->input->post('program_id');
                $batch_id = $this->input->post('batch_id');
                $course_id = $this->input->post('course_id');
                $student_id = $this->input->post('student_id');

                $data['results'] = $this->csv_model->get_single_student_result($student_id, $course_id);

                $this->load->view('show_single_student_report', $data);
            
            else
                redirect("main/check_result");
            


        

查看代码为:

$this->load->view('show_single_student_report', $data);

这个

<?php foreach ($results as $std):  ?>
<div class="row">

         <?php $obtain += $std->obtain_marks; ?>
         Name : <?= $std->student_name;?> <br>
         obtain marks: <?= $std->obtain_marks; ?> <br>
         total_marks: <?= $std->total_marks;?> <br>
         category: <?= $std->category_name; ?><br>
         course: <?= $std->course_name; ?><br>
         category_id: <?= $std->cat_id;?> <br>
         </div>
         <div style="height: 50px;"></div>

         <?php endforeach;?>

基本上我不知道如何通过 PHP 迭代 mysql 查询。

【问题讨论】:

您想要更改 foreach 中的哪些内容?你想执行这个计算:(total obtain / total question marks) * 100 foreach 行吗?如果您可以呈现您想要完成的内容的示例表,那将会很有帮助 我添加了表格截图,但它正在显示,nimb.ws/3g4Tb2 表格截图链接。 每个类别。您可以检查图像中的表格。我想遍历所有类别。并得到每个类别的总得分和总分。 所以基本上你只想没有重复的类别。因此,例如,您看不到它在图像中的表示。相反,您只看到一次Tools and tech skills,然后您会看到获得的分数 8 和总分 10? 嗯,我想是的,基本上我想要每个类别的总获得和总问号,一个接一个。检查这张表。 nimb.ws/Cw3m8A 这是一个类别。我想从 codeigniter 迭代它,这样我就可以获得所有类别的同一张表并显示总分 【参考方案1】:

您想修改查询以按类别聚合标记。

尝试运行:

SELECT 
    q.cat_id,
    SUM(r.marks) AS obtain_marks,
    SUM(q.ques_marks) AS total_marks,
FROM tbl_result as r 
JOIN tbl_question as q on q.id = r.ques_id 
GROUP BY q.cat_id

这应该让您了解 SUM() 和 GROUP BY 如何协同工作。 然后,只需将其与您的其他数据连接起来:

SELECT 
std.reg_id, 
std.name as student_name
FROM tbl_student as std
JOIN
(
    SELECT 
    q.cat_id,
    r.student_id,
    SUM(r.marks) AS obtain_marks,
    SUM(q.ques_marks) AS total_marks,
    FROM tbl_result as r 
    JOIN tbl_question as q on q.id = r.ques_id 
    WHERE r.student_id = std.id
    GROUP BY q.cat_id
) tbl1
ON tbl1.student_id = std.id

【讨论】:

以上是关于如何在 PHP Codeigniter 中处理 SQL 查询数据的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter PHP - 如何在使用“select *”时选择在连接中选择哪个 ID

删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时

CodeIgniter / PHP:如何在 .php 视图页面中获取 URI

如何删除codeigniter路径中的“index.php”

如何在 html + php(codeIgniter) 中渲染树

PHP 如何在CodeIgniter中刷新当前页面