проблема php структуры данных массива

Это для завершения @Damian хорошего ответа. Я уже предлагал подход JSON в других ответах до удобной функции json_object_agg 9.6. Это просто требует больше работы с предыдущим набором инструментов.

Два из приведенных возможных недостатков на самом деле нет. При необходимости случайный порядок ключей трижды корректируется. Отсутствующие ключи, если необходимо, занимают почти тривиальное количество кода, подлежащего устранению:

select
    row_name as bar,
    json_object_agg(attrib, val order by attrib) as data
from
    tbl
    right join
    (
        (select distinct row_name from tbl) a
        cross join
        (select distinct attrib from tbl) b
    ) c using (row_name, attrib)
group by row_name
order by row_name
;
 bar |                     data                     
-----+----------------------------------------------
 a   | { "val1" : 10, "val2" : 20, "val3" : null }
 b   | { "val1" : 3, "val2" : 4, "val3" : null }
 c   | { "val1" : 5, "val2" : null, "val3" : null }
 d   | { "val1" : 6, "val2" : 7, "val3" : 8 }

Для конечного пользователя запроса, который понимает JSON, нет недостатков. Единственное, что он не может быть использован в качестве источника таблицы.

1
задан Nadeem Khedr 8 August 2010 в 11:13
поделиться

1 ответ

проблема в том, что вы сбрасываете массив во второй раз при входе в цикл by = ,

, чтобы решить эту проблему, вам нужно добавить немного, если

    if(!isset($data[$row->headline_id])) {
      $data[$row->headline_id]= array( 
        'headline_name' => $row->headline_name ,
        'score' => $row->score,
      );
  }

другая проблема: я рекомендую не хранить эти поля в этой таблице не нормализовано,

headline_name
score
2
ответ дан 2 September 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: