【问题标题】:Is there a way to group a "key-value store data" by ID in a multidimensional array? [duplicate]有没有办法在多维数组中按 ID 对“键值存储数据”进行分组? [复制]
【发布时间】:2018-05-24 17:53:25
【问题描述】:

有没有办法在多维数组中按 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
...

对于我使用的应用程序的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 ...

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

【问题讨论】:

    标签: php mysql arrays multidimensional-array pdo


    【解决方案1】:

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

    您可以通过以下查询以您想要的方式获取数据,但它有点笨拙:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2016-12-02
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多