dongxun6458 2015-11-24 14:01
浏览 226
已采纳

如何在PHP中合并具有相同ID的数据?

My select returns values like this: enter image description here

It can merge the two lines into one? If so, it is possible in php, or Tsql?
Something like: enter image description here

This is my select:

           SELECT TRM_ID_TURMA
                 , TRM_HORA_INICIO
                 , TRM_HORA_FIM
                 , TRM_DIA
                 , TRM_VAGAS
                 , MGN_NOME
                 , PROF.USU_NOME AS PROFESSOR
                 , ALU_MATRICULA
                 , USU.USU_NOME NOMEALUNO
              FROM [MGB].[dbo].[TB_TURMA]
             INNER JOIN TB_USUARIO PROF ON PROF.USU_ID_USUARIO = TRM_ID_PROFESSOR
             INNER JOIN TB_NIVEL_TURMA ON NTR_ID_NIVEL_TURMA = TRM_ID_NIVEL
             INNER JOIN TB_MGB_NIVEL ON MGN_ID_MGB_NIVEL = NTR_ID_MGB_NIVEL
             INNER JOIN TB_LOCAL ON LOC_ID_LOCAL = TRM_ID_LOCAL
              LEFT JOIN TB_TURMA_ALUNO ON TAL_ID_TURMA = TRM_ID_TURMA
              LEFT JOIN TB_ALUNO ON ALU_ID_ALUNO = TAL_ID_ALUNO
              LEFT JOIN TB_USUARIO USU ON USU.USU_ID_USUARIO = ALU_ID_USUARIO
             WHERE TRM_ID_ACADEMIA = 27
               AND TRM_STATUS >= 0
               AND (TAL_STATUS IS NULL OR TAL_STATUS >= 0)
             ORDER BY TRM_HORA_INICIO,  TRM_HORA_FIM, TRM_DIA, ALU_MATRICULA, NOMEALUNO
  • 写回答

3条回答 默认 最新

  • duanjiao1256 2015-11-24 14:38
    关注

    Rephrased, I think you say, When TRM_ID_TURMA is the same, pick one row, and join (with comma's) the contents of ALU_MATRICULA and NOMEALUNO.

    Is that right?

    If so, I think you should solve it in PHP, because that is much easier than in SQL (whichever dialect you happen to use is a mystery to me, I see mysql, sql, oracle and tsql).

    Suppose you have run your query, and stored your result in an associative resultset, an array, then try something like this:

    $RS = ......your query that results in an array.......
    /* 
    $RS looks like:
    array(
     [0] => array("TRM_ID_TURMA"=>48, "TRM_HORA_INICIO" => "10:00:00 000000", ..etc..),
     [1] => array("TRM_ID_TURMA"=>49, "TRM_HORA_INICIO" => "10:00:00 000000", ..etc..)
     [2] => etc etc
    )
    */
    
    $tmp = array();
    foreach ($RS as $one){
      // $tmp used TRM_ID_TURMA as key, and row as content
      if (isset($tmp[$one["TRM_ID_TURMA"]])){
        // TRM_ID_TURMA already used, add to the fields ALU_MATRICULA and NOMEALUNO.
        $tmp[$one["TRM_ID_TURMA"]]["ALU_MATRICULA"] .= ", " . $one["ALU_MATRICULA"];
        $tmp[$one["TRM_ID_TURMA"]]["NOMEALUNO"] .= ", " . $one["NOMEALUNO"];
      } else {
        $tmp[$one["TRM_ID_TURMA"]] = $one;
      }
    }
    

    And your desired result is now in $tmp (with TRM_ID_TURMA as keys)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计