ОБЪЕДИНЕНИЕ ГРУПП MySQL с 3 столбцами выполняется на PHP


У меня есть запрос с подзапросом, который может возвращать более 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  |

Вышесказанное будет отображаться в таблице html с использованием php.

Author: i-faith, 2018-03-08

1 answers

На мой взгляд, самым простым способом было бы выполнить порядок запросов по группам, а затем посмотреть, как управлять им в 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, когда вы отображаете данные, вы отображаете их только при изменении имени группы.

Пример кода:

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";
}

Это, конечно, пример в зависимости от того, как вы хотите отобразить данные, но я думаю, что вы поняли общую идею здесь.

 1
Author: Daniel E., 2018-03-08 13:03:53