如何根据特定列值将多个值组合为一个?

How to group multiple values into one based on specific column value?

我正在做我的项目,我需要一些帮助。我在 WordPress 中制作我的自定义端点。除了一件事,一切都很好。我有数据库:

id city company email website
22 city_1 company one comp@example.com comp1.com
12 city_2 company two comp2@example.com comp2.com
31 city_2 company three comp3@example.com comp3.com
72 city_3 company four comp4@example.com comp4.com

我想打印包含该格式的 JSON

   {
      "city":"city_1",
      "companies": [
        {
         "id":"22",
         "email":"comp@example.com",
         "website":"comp1.com"
        }
      ],
   },
   {
      "city":"city_2",
      "companies": [
        {
         "id":"12",
         "email":"comp2@example.com",
         "website":"comp2.com"
        },
        {
         "id":"31",
         "email":"comp3@example.com",
         "website":"comp3.com"
        }
      ],
   },
   {
      "city":"city_4",
      "companies": [
        {
         "id":"72",
         "email":"comp4@example.com",
         "website":"comp4.com"
        }
      ],
   },

所以,我想根据城市价值将多个值归为一个。我该怎么做?我尝试使用 GROUP BY 语句,但它给了我一行。 我当前的 SQL 查询:

SELECT * FROM database ORDER BY city COLLATE utf8_polish_ci

使用

JSON_ARRAYAGG

select JSON_ARRAYAGG(JSON_OBJECT('city',city,'companies',companies)) from (
select city,JSON_ARRAYAGG(JSON_OBJECT('id',id,'company', 
company,'email',email,'website',website)) as companies from test group by city
)t;

这将以 JSON 格式打印预期输出。

输出:

[
{
"city": "city_1", "companies": [{"id": 22, "email": "comp@example.com ", "company": "company one  ", "website": "comp1.com"}]
}, 
{
"city": "city_2", "companies": [{"id": 12, "email": "comp2@example.com", "company": "company two  ", "website": "comp2.com"}, 
{"id": 31, "email": "comp3@example.com", "company": "company three", "website": "comp3.com"}]
}
]