2

我从客户端收到以下 JSON 响应:

{
    "name": "Joel",
    "cities_visited": [{
        "city1": "Chicago",
        "city2": "Seattle"
    }],
    "active": true
}

我正在使用json_decode来获取结果,但在将 city_visited 作为一组数据插入 mysql 时遇到问题。我也试过json_decode($json, true)没有运气。

谁能给我一些见解,如何正确准备这些数据的格式,以便我可以插入到我的数据库中?

我需要以某种方式将这个 city_visited 数组放入 mysql 上的一个条目行,然后能够将其取出并与 json_encode 一样返回

4

2 回答 2

2

如果您只有一列cities_visited并且需要将多个值放入其中,那么它们需要以某种方式进行序列化。由于您已经在处理 JSON,您不妨将其转回 json 以将其发送到数据库。

$user = json_decode($input);
$user->cities_visited = json_encode($user->cities_visited);

类似的东西。虽然这不是最好的解决方案,但您真正想做的是在用户和城市之间建立多对人的关系

用户

  • 标识(整数)
  • 名称(字符串)
  • 状态(字符串)

城市

  • 标识(整数)
  • 名称(字符串)

访问

  • user_id (int)
  • city_id (int)

因此,在上面的示例数据中,您将在用户表中为 Joel 创建一行,在 City 表中为芝加哥和西雅图创建两行,在 Visits 表中创建两行将它们链接在一起。

这种方法的优点是现在更容易分析数据。假设您想知道访问次数最多的城市是什么?简单地

select count(*) AS number_visits, name as city_name
from Visits v 
join Cities c on v.city_id = c.id
group by v.city_id
order by visits
limit 1

如果该cities_visited字段在数据库中被序列化,您必须使用 PHP 遍历每个用户并自己计算结果。

于 2013-04-19T21:56:45.200 回答
1

由于您正在处理一个数组,您可以尝试在将结果存储到数据库之前对其进行序列化。然后在检索它时对其进行反序列化。

见: http: //php.net/manual/en/function.serialize.php

于 2013-04-19T21:54:33.953 回答