在php中从mysql查询JSON db对象

在php中从mysql查询JSON db对象,php,mysql,json,Php,Mysql,Json,所以我有一个应用程序和一个非常烦人的客户机,他们改变了很多想法,所以我决定将一些数据存储为JSON对象 我有一个匹配系统,在这里我将用户注册的匹配项存储为他们的用户ID数组的JSON对象版本 我想显示用户已经注册的所有匹配项,作为我的筛选选项之一,因此我基本上需要查看该用户的id是否存储在文本类型数据对象中 我能想到的两种方法是: 要查询每个匹配项并对对象进行JSON解码,然后在_数组中使用,查看它们是否在匹配项中(我没有这样做) 只需使用类似于的查询在JSON文本中搜索“[userid]”(我

所以我有一个应用程序和一个非常烦人的客户机,他们改变了很多想法,所以我决定将一些数据存储为JSON对象

我有一个匹配系统,在这里我将用户注册的匹配项存储为他们的用户ID数组的JSON对象版本

我想显示用户已经注册的所有匹配项,作为我的筛选选项之一,因此我基本上需要查看该用户的id是否存储在文本类型数据对象中

我能想到的两种方法是:

  • 要查询每个匹配项并对对象进行JSON解码,然后在_数组中使用
    ,查看它们是否在匹配项中(我没有这样做)

  • 只需使用类似于的
    查询在JSON文本中搜索“[userid]”(我就是这么做的)


  • 有没有更好的方法来做这样的事情?MySQL有更好的内置函数吗?

    尝试将用户数据存储在关系数据库(如MySQL)中的JSON对象中是错误的。您的数据库不是面向对象的,而是关系型的。遵循关系数据库的规则将很好地为您服务。您最好构建一个良好的数据库(DB)结构并执行准确的MySQL查询

    如果您将数据库保持在至少相同的状态,您会发现,当客户端改变主意时(一次又一次…一次又一次…),您可以添加和更改用户属性,因为给定表中保留的数据较少,因此您可以添加和更改小表,而不会产生巨大的系统范围影响


    DB中的另一个选项是创建一个表,该表按id、名称和值具有各种属性。

    尝试将用户数据存储在关系数据库(如MySQL)中的JSON对象中是错误的。您的数据库不是面向对象的,而是关系型的。遵循关系数据库的规则将很好地为您服务。您最好构建一个良好的数据库(DB)结构并执行准确的MySQL查询

    如果您将数据库保持在至少相同的状态,您会发现,当客户端改变主意时(一次又一次…一次又一次…),您可以添加和更改用户属性,因为给定表中保留的数据较少,因此您可以添加和更改小表,而不会产生巨大的系统范围影响



    DB中的另一个选项是创建一个表,该表按id、名称和值具有各种属性。

    为什么不将对象存储为记录,每个属性都有一个字段?我们能看看这个物体的例子吗?在数据库中存储JSON字符串并查询部分字符串不是一个好的做法。为什么要先在mysql中存储JSON?您使用的是ORM吗?哪一个?我使用json对象将注册用户存储在匹配项上。匹配项仍然有一个id和一系列其他属性。我本可以使用一个separte表来存储注册用户,以便根据匹配ID进行匹配,但我一直在阅读存储json txt字段的实践,并想尝试一下。但是不同的匹配允许不同的进入者总数,所以我必须将字段设置为max users,这在大多数情况下都是空的。我意识到这并不太糟糕,但这似乎是一个尝试json的好机会。为什么不将对象存储为记录,每个属性都有一个字段?我们能看看这个物体的例子吗?在数据库中存储JSON字符串并查询部分字符串不是一个好的做法。为什么要先在mysql中存储JSON?您使用的是ORM吗?哪一个?我使用json对象将注册用户存储在匹配项上。匹配项仍然有一个id和一系列其他属性。我本可以使用一个separte表来存储注册用户,以便根据匹配ID进行匹配,但我一直在阅读存储json txt字段的实践,并想尝试一下。但是不同的匹配允许不同的进入者总数,所以我必须将字段设置为max users,这在大多数情况下都是空的。我意识到这不算太糟糕,但这似乎是一个尝试json的好机会。我同意Chris的观点,你应该重新审视你的模式设计,通过从数据库中提取数据,而不是预先构建的json对象,将json结构留在应用层。如果你阅读我上面的评论,我会在这个例子中将它们结合起来。你能解释一下为什么这是个错误吗?我的观点是,仅仅因为某些东西不应该以某种方式工作并不意味着它不能或不应该。然而,如果这是一个性能问题,那么我将立即放弃。另外,如果你看看基于zend framework构建的social engine 4这样的平台,似乎一个站点上有一大堆东西被上千个表控制,这确实会影响性能。就性能而言,标准化确实会很昂贵,但尝试使用LIKE子句在DB表的单个字段中搜索JSON对象的代价将更高。如果你真的开始使用数据库中的对象,你可能会看一看,我只是想把难以预测的变量存储为我可以在这里或那里用自定义编码解释的对象。虽然like子句会影响性能,但如果我将其作为json编码的用户ID[“user_ID”],我可以预期有限的结果。有趣的是,看看是否有人实际测量了每个用户执行类似这样的Like语句与执行相同操作的Join语句所需的时间。这看起来唯一的缺点就是查询存储的对象。我同意Chris的观点,你应该重新审视你的模式设计,通过从数据库中提取数据,而不是预先构建的JSON对象,将JSON结构留在应用层。如果你读到我上面的评论,我会在这个例子中将它们组合起来。你能解释一下为什么这是个错误吗?我的观点是