获取同一行的多个值


Obtaining multiple values for same row

表A包含

id | data
1     10
2     20

和包含

的表B
id | a_id | value
1     1       abc
2     1       def
3     2       ghi

表B的列a_id引用表A的列id。我必须从表A中检索最后4行数据以及表B中相应的值。当我试图使用此查询

检索它时
SELECT * FROM tableA INNER JOIN tableB ON tableA.id = tableB.id ORDER BY tableA.id DESC LIMIT 4

我得到了表A中id为1的重复行

id | data | value
1     10     abc
1     10     def
2     20     ghi 

是否有任何方法可以减少这个重复的数据,以便我可以获得单行id 1及其两个值?

您可以对GROUP_CONCAT执行此操作,请参阅此处的文档https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

SELECT *, GROUP_CONCAT(tableB.value SEPERATOR ',')
    FROM tableA 
    INNER JOIN tableB ON tableA.id = tableB.id
    GROUP BY tableA.id
    ORDER BY tableA.id DESC
    LIMIT 4

请使用此查询:

    SELECT * FROM tableA INNER JOIN tableB ON tableA.id = tableB.id ORDER BY tableA.id DESC LIMIT 4 Group By tableA.id

在PHP中进行后处理,例如:

$data = [];
while ($row = $result->fetchAssoc()) {  // or whatever you do to fetch your data
    if (!isset($data[$row['id']])) {
        $row['value'] = [$row['value']];
        $data[$row['id']] = $row;
    } else {
        $data[$row['id']]['value'][] = $row['value']
    }
}

给出如下结果:

[
    1 => [
        id => 1,
        data => 10,
        value => ['abc', 'def']
    ]
    ..
]