有没有办法在多维数组中按ID对“键值存储数据”进行分组?

时间:2017-12-11 08:37:58

标签: php mysql arrays multidimensional-array pdo

有没有办法按多维数组中的ID对“键值存储数据”进行分组?

SQL表:

Table 1: App
ID | Name      | Release
1  | TinyWings | 2014
2  | WarCraft  | 2012
3  | StarCraft | 1998

Table 2: AppInfo
ID | Key       | Value
1  | Genre     | Casual
1  | Rating    | 0+
1  | System    | iOS
...
2  | Genre     | RTS
2  | Rating    | 6+
2  | System    | Win
...
3  | Genre     | RTS
3  | Rating    | 12+
3  | System    | Win
...

对于我使用的app的profil php页面

$app = $statement->fetchAll(PDO::FETCH_KEY_PAIR);

但是在index.php页面上,我需要一个像这样的数组用于分页:

Array (
    [0]=> Array (
              [Genre]=>[Casual]
              [Rating]=>[0+]
              [System]=>[iOS]
              ...)
    [1]=> Array (
              [Genre]=>[RTS]
              [Rating]=>[6+]
              [System]=>[Win]
              ...)
    [2]=> Array (
              [Genre]=>[RTS]
              [Rating]=>[12+]
              [System]=>[Win]
              ...)
)

我找到的唯一方法是使用

MAX(CASE WHEN ... THEN .. END) AS ...

对于将行写入列的prepare语句中的每个键,有没有办法将它与PDO :: FETCH_KEY_PAIR一起使用或更好更简单的方法?

1 个答案:

答案 0 :(得分:0)

你可以做到,但实际上你应该将你的表重组为一个使用你的键作为列名的表,因为它会让你的生活更轻松。

您可以使用以下查询以您希望的方式获取数据,但它有点笨拙:

select a.id, a.value as 'genre', b.value as 'rating', c.value as 'system'
from Table1 a, Table1 b, Table1 c
where (a.key = 'genre' AND b.key = 'rating' and c.key = 'system') AND (a.id = b.id AND b.id = c.id)
group by a.id

继承人demo

相关问题