将嵌套数组从json响应插入mysql

时间:2013-04-19 21:51:41

标签: php mysql json

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

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

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

任何人都可以给我一些见解,如何准确地准备这些数据,以便我可以插入我的数据库吗?

我需要以某种方式将这个cities_visited数组放到mysql上的一个入口行中,然后能够将它取出并以json_encode的形式返回

2 个答案:

答案 0 :(得分:2)

如果cities_visited只有一列,并且需要将多个值放入其中,那么它们需要以某种方式序列化。既然你正在处理JSON,你也可以把它转回json把它发送到数据库。

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

这样的事情。这不是最好的解决方案,你真正想做的是在用户和城市之间建立多人关系

用户

  • id(int)
  • name(string)
  • status(string)

城市

  • id(int)
  • name(string)

访问

  • 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循环遍历每个用户并自行计算结果。

答案 1 :(得分:1)

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

请参阅:http://php.net/manual/en/function.serialize.php