具有 3 列的 MYsql GROUP_CONCAT 在 PHP 中执行

Posted

技术标签:

【中文标题】具有 3 列的 MYsql GROUP_CONCAT 在 PHP 中执行【英文标题】:MYsql GROUP_CONCAT with 3 columns execute in PHP 【发布时间】:2018-08-16 15:53:24 【问题描述】:

我的查询包含可能返回超过 1 个结果的子选择:

   SELECT
    t1.group,
        (SELECT GROUP_CONCAT(t3.id,','t3.name,','t3.age SEPARATOR('---') FROM table t3 WHERE t3.id= t2.id GROUP BY t3.id )) AS names,
    FROM
        table1 AS t1
        JOIN table2 AS t2 ON t1.id = t2.id
    WHERE
        t1.id = 1

我设法使用嵌套的 foreach 显示结果,但结果有点混乱。我在想如何拥有这个。 可能的结果

GROUP   | ID | NAME | AGE |
--------|----|------|-----|
        | 1  | John | 20  |
GROUP1  | 2  | Phil | 22  |
        | 3  | Dave | 24  |
--------|----|------|-----|
        | 4  | Jan  | 20  |
GROUP2  | 5  | Luke | 22  |

以上内容将使用 php 显示在 html 表格中。

【问题讨论】:

您的查询似乎有什么问题? 为什么不SELECT id as ID name as NAME age as AGE FROM table WHERE id = 1 因为该查询只是子查询并且可能有多个结果。我想知道如何使用 foreach 在 php 中做到这一点 @MCMXCII 更新问题。 请用所有查询的一些数据和预期结果更新您的问题 【参考方案1】:

我认为最简单的方法是按组进行查询顺序,然后查看如何在 php 中进行管理:

SELECT
    t1.group,
    t3.id, 
    t3.name,
    t3.age
    FROM
        table1 AS t1
    LEFT JOIN table2 AS t2 ON t1.id = t2.id
    LEFT JOIN table3 t3 ON t3.id= t2.id
    WHERE
        t1.id = 1
    ORDER BY t1.group

那么在php中显示数据时,只有groupe名称改变时才显示。

示例代码:

if ($result->num_rows > 0) 
    $lastGroup = "";
    // output data of each row
    while($row = $result->fetch_assoc()) 
        if($lastGroup == $row["group"])
          $row["group"]= "";
        
        else
          $lastGroup = $row["group"] ;
         
        echo $row["group"]. " || "
             . $row["id"]. " || " . $row["name"]. " || " . $row["age"]."<br>";
    
 else 
    echo "0 results";

这当然是一个示例,具体取决于您希望如何显示数据,但我认为您在这里得到了大致的想法。

【讨论】:

谢谢!我没有做提供的查询,但你给了我想法:)

以上是关于具有 3 列的 MYsql GROUP_CONCAT 在 PHP 中执行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 选择具有空列的行

MySql 选择具有多个特定列的所有表

选择具有相同列的所有行以分隔mysql中的列

从 MySQL 中具有不同列的表的多个连接结果中删除重复项

具有动态列的 MySQL 数据透视表查询

具有动态列的 MySQL 数据透视表查询