PHP构建表和基于列的分组结果

时间:2018-03-28 20:04:42

标签: php

所以,我已经在MySQL查询中进行分组和排序,由于布局,我无法再使用查询了。

  $sql = "SELECT a.name AS agcname, m.npa, m.nxx, COUNT( m.npa ) AS ooscount,e.rcabbr,s.l_state
FROM MTAs m
INNER JOIN AGCs a ON a.id = m.agcid
LEFT JOIN endoffice.endoff e ON e.npa = m.npa
INNER JOIN endoffice.state s ON s.s_state = e.state
AND e.nxx = m.nxx
WHERE agcid =  '".$agcid."'
GROUP BY npa, nxx
ORDER BY rcabbr ASC";

这个查询给我这样的结果:

agcname     npa nxx ooscount    rcabbr      l_state
agc02lttnco 818 575 1           AGOURA      CALIFORNIA
agc02lttnco 818 597 1           AGOURA      CALIFORNIA
agc02lttnco 562 598 1           ALAMITOS    CALIFORNIA
agc02lttnco 562 343 3           ALAMITOS    CALIFORNIA
agc02lttnco 562 386 7           ALAMITOS    CALIFORNIA
agc02lttnco 562 438 1           ALAMITOS    CALIFORNIA
agc02lttnco 562 433 1           ALAMITOS    CALIFORNIA
agc02lttnco 562 987 1           ALAMITOS    CALIFORNIA
agc02lttnco 719 589 2           ALAMOSA     COLORADO
agc02lttnco 719 937 2           ALAMOSA     COLORADO
agc02lttnco 719 992 1           ALAMOSA     COLORADO

然后我使用PHP根据ratecenter(rcabbr)对结果进行分组,并结合使用ooscount构建一个带速率中心的行,并将所有NPA NXX与该速率中心绑定。

这是我用来做的代码。

  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
      $agcrow = "";
      $agcname = $row['agcname'];
      $ooscount = $row['ooscount'];
      $npa = $row['npa'];
      $nxx = $row['nxx'];
      $rcabbr = $row['rcabbr'];
      $l_state = $row['l_state'];
      $npanxx = "".$npa."".$nxx."";

      if (isset($rc) && $rc != $rcabbr) {
          $agcrow .= "</td><td>".$rcoos."</td>\n                     </tr>\n";
          unset($rcoos);
          unset($rc);
          unset($st);

      }    

      if (!isset($rc)) {
          $rc = $rcabbr;
          $st = $l_state;
          $agcrow .= "\n<tr>     
                       <td>" . $agcname. "</td>   
                       <td>".$rc."</td>   
                       <td>".$l_state."</td>
                       <td><A href=\"".$_SERVER['PHP_SELF']."?agcid=".$agcid."&npa=".$npa."&nxx=".$nxx."\">".$npanxx."</a><BR>\n";
      } else {
          $agcrow .= "<A href=\"".$_SERVER['PHP_SELF']."?agcid=".$agcid."&npa=".$npa."&nxx=".$nxx."\">".$npanxx."</a><BR>\n";   
      }
      $rcoos = $rcoos + $ooscount;

      echo $agcrow;
    }
  }

最终结果是类似于以下内容的行:

 agc01   lawerence   kansas  909123   1231
                             909124
                             909125
                             909126
 agc01   hayes       kansas  909223   265
                             909224
 agc01   wallaby     kansas  909333   
                             909334

获得我需要/想要的数据后,我使用jquery数据表使其可以排序。

我遇到的问题是,由于我的逻辑实现方式,最后一行缺少计数。我努力弄清楚如何实现这一目标,但设法让它与这一个小怪癖一起工作。

我怎样才能以正确的方式解决这个问题,以便在最后一行找到最后一栏?

2 个答案:

答案 0 :(得分:0)

我会在sql中做你的总结:

public List<SomeObj> LoadSomeData(List<int> listOfIds)
{
    using (var context = new DataContext())
    {
        var result = 
            context.Database.SqlQuery<SomeObj>
            ($"SELECT * FROM SOMEOBJECT WHERE id IN ({id})") <-- I am not sure how to pass list in 
        return result;
    }
}

答案 1 :(得分:0)

我显然是在过度思考这个问题。在while循环继续完成后,var rcoos将保持不变,所以这只是在最后添加var的问题。

    </td>
    <td><?=$rcoos?></td>
    </tr>
    </tbody>