Php SQL查询组合

Php SQL查询组合,php,sql,database,Php,Sql,Database,如何使用一个查询获得以下代码的相同数据? 不使用多个请求 $result = "SELECT classid FROM student_result_history WHERE s_id = 11 GROUP BY class_name"; foreach($result as $row){ $classid = $row["classid"]; $result2 = "SELECT term FROM student_result_history WHERE class_name =

如何使用一个查询获得以下代码的相同数据? 不使用多个请求

$result = "SELECT classid FROM student_result_history WHERE s_id = 11 GROUP BY class_name";

foreach($result as $row){
  $classid = $row["classid"];
  $result2 = "SELECT term FROM student_result_history WHERE class_name = $classid GROUP BY term";

  foreach($result2 as $row2){
    $term = $row2["term"];
    $result3 = "SELECT subject_name, primary_mark, secondary_mark, practical_mark FROM student_result_history WHERE term = '$term' AND class_name = '$classid' AND s_id = 11";

    foreach($result3 as $row3){
        print_r($row3);
    }   
  } 
}
我不想使用多个数据库请求

$result = "SELECT classid FROM student_result_history WHERE s_id = 11 GROUP BY class_name";

foreach($result as $row){
  $classid = $row["classid"];
  $result2 = "SELECT term FROM student_result_history WHERE class_name = $classid GROUP BY term";

  foreach($result2 as $row2){
    $term = $row2["term"];
    $result3 = "SELECT subject_name, primary_mark, secondary_mark, practical_mark FROM student_result_history WHERE term = '$term' AND class_name = '$classid' AND s_id = 11";

    foreach($result3 as $row3){
        print_r($row3);
    }   
  } 
}
我想要嵌套数组中的结果,如

array(
    array( /*class_name 1*/
        array( /*term 1*/
            'subject_name' => 'abc',
            'secondary_mark' => 12,
            'practical_mark' => 30
        ),
        array( /*term 2*/
            'subject_name' => 'bcd',
            'secondary_mark' => 32,
            'practical_mark' => 20
        )
    ),
    array( /*class_name 2*/
        array( /*term 1*/
            'subject_name' => 'abc',
            'secondary_mark' => 42,
            'practical_mark' => 20
        ),
        array( /*term 2*/
            'subject_name' => 'bcd',
            'secondary_mark' => 32,
            'practical_mark' => 20
        )
    )
)

您将无法使用SQL创建嵌套的PHP数组。不管您的查询做什么,它只会返回行,您必须在PHP中操作它们以获得嵌套结构。由于您需要的所有内容都在同一个表中,因此实际上不需要使查询变得如此复杂

只需选择所需的所有列,无需分组

SELECT class_name, term, subject_name, primary_mark, secondary_mark, practical_mark 
FROM student_result_history WHERE s_id = 11
然后在获取结果时在PHP中创建嵌套结构

while ($row = $query->fetch()) {
    $result[$row['class_name']][$row['term']] = [
        'subject_name' => $row['subject_name'],
        'secondary_mark' => $row['secondary_mark'],
        'practical_mark' => $row['practical_mark']
    ];
}

您并没有说它的数据库版本是什么,所以我假设它实现了CTE(大多数都实现)。在这种情况下,一个简单的查询应该执行以下操作:

with
c as (
  select classid 
     from student_result_history 
     where s_id = 11 
     group by class_name
),
t as (
  select term 
     from student_result_history t1
     where t1.class_name = c.classid 
     group by t1.term
)
select subject_name, primary_mark, secondary_mark, practical_mark 
  from student_result_history s
  where s.term = t.term 
    and s.class_name = c.classid 
    and s.s_id = 11

这个查询的好处在于,它只需要对已有的SQL查询进行最小的更改。它主要是关于组合您拥有的SQL部分。

您可以使用Union将多个Select查询组合成一个只生成一个结果集的查询。如果不使用第一次查询中的任何数据,您可以在这里学习基本知识。你为什么要运行它?@司机是的,他是?哦,他改变了问题。让我再看一遍。@u我用的是classid。我没有在那里使用完整的代码(查询),我只是用于显示循环和请求