在MYSQL中组合键和值列以及一行

时间:2017-10-01 20:52:31

标签: php mysql

我想通过选择来组合多个值。 我有这个:

| id | student_id | key       | value     |
| 1  | 1          | dad_name  | Leonel    |
| 2  | 1          | mom_name  | Mireya    |
| 3  | 1          | school    | Agape     |

并将其转换为:

| id | student_id | dad_name | mom_name | school |
| 1  | 1          | Leonel   | Mireya   | Agape  |

3 个答案:

答案 0 :(得分:1)

一种方式(尽管不是最好的方式)是:

SELECT r.id, r.student_id, r.value as dad_name, r2.value as mom_name, r3.value as school 
FROM table r 
     JOIN table r2 ON r.student_id=r2.student_id 
     JOIN table r3 ON r.student_id=r3.student.id 
WHERE r.key='dad_name' 
      AND r2.key='mom_name' 
      AND r3.key='school'

答案 1 :(得分:1)

您可以自己加入表格。我们的$ table是你的表的名字;那么查询会看起来像这样

"
SELECT t1.student_id, t2.value AS dad_name, 
  t3.value AS mom_name, t4.value AS school 
FROM $table AS t1 LEFT JOIN ($table AS t2, $table AS t3, $table AS t4)
ON (t2.student_id = t1.student_id AND t3.student_id = t1.student_id 
  AND t4.student_id = t1.student_id)
"

答案 2 :(得分:0)

这并非严格要求,但根据tadman的评论,在应用层进行此类转换可能会更清晰。

例如......

$output = [];
foreach($resultset as $row) {
    $output[$row->student_id]->{$row->key} = $row->val;
}

这将导致像这样的输出

Array
(
    [1] => stdClass Object
        (
            [dad_name] => Leonel
            [mom_name] => Mireya
            [school_name] => Agape
        )

)