简体   繁体   English

按级别分组行,并为每个行放置名称

[英]Group rows by level and put name for each

I have this table 我有这张桌子

id   ins  sec  div  subject  subjectHour  level
1     1    1    7   subName       5      level 1
2     1    2    7   subName2      4      level 1
3     1    2    7   subName3      4      level 2
4     1    1    7   subName4      6      level 2

I want to out put something like 我想把像

level 1 subjects 1级科目
subName SUBNAME
subName2 subName2

level 2 subjects 2级科目
subName3 subName3
subName4 subName4

mysql JOIN the 4 tables mysql加入4张表

    $displayMat = $db->prepare('SELECT
     a.id, a.ins_id, a.sub_name, a.subHour, a.level,
     b.id, b.ins_name,
     c.id, sec_name,
     d.id, div_name
     FROM ins_subjects AS a
     INNER JOIN institutes AS b
     INNER JOIN ins_sections AS c
     INNER JOIN ins_division AS d
     WHERE a.ins_id=?
     GROUP BY a.id;
 ');

and here is the looping 这是循环

$displayMat->bind_param('i', $inId);
  if ($displayMat->execute()) {
  $results = $displayMat->get_result();
  while ($m = mysqli_fetch_array($results)) {
<li>
  <div class="col-xs-3"><?php print $m['sub_name']; ?></div>
  <div class="col-xs-3"><?php print $m['ins_name']; ?></div>
  <div class="col-xs-3"><?php print $m['sec_name']; ?></div>
  <div class="col-xs-3"><?php print $m['div_name']; ?></div>
</li>
}

You SQL needs some join conditions, and the GROUP BY seem superfluous. 您的SQL需要一些连接条件,而GROUP BY似乎是多余的。

Starting with something like this:- 从这样的东西开始:

SELECT a.id, a.ins_id, a.sub_name, a.subHour, a.level,
        b.id, b.ins_name,
        c.id, sec_name,
        d.id, div_name
FROM ins_subjects AS a
INNER JOIN institutes AS b ON a.ins_id = b.id
INNER JOIN ins_sections AS c ON a.sec_id = c.id
INNER JOIN ins_division AS d ON a.div_id = d.id
ORDER BY a.level, a.sub_name

you can read each row in turn. 您可以依次读取每一行。 Store the level and when the level changes from the previous row you output the level. 存储级别,并在级别从上一行更改时输出级别。

EDIT 编辑

Crudely done in php, something like this (not used lists here) 用php粗心完成,类似这样(此处未使用列表)

<?php
$displayMat->bind_param('i', $inId);
if ($displayMat->execute()) 
{
    $results = $displayMat->get_result();
    $prev_level = '';
    while ($m = mysqli_fetch_array($results)) 
    {
        if ($prev_level != $m['level'])
        {
            echo $m['level'];
        }
        $prev_level = $m['level'];
        ?>
          <div class="col-xs-3"><?php print $m['sub_name']; ?></div>
          <div class="col-xs-3"><?php print $m['ins_name']; ?></div>
          <div class="col-xs-3"><?php print $m['sec_name']; ?></div>
          <div class="col-xs-3"><?php print $m['div_name']; ?></div>
        <?php
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM