2011-11-18 158 views
0

所以我有一个应用程序和一个非常烦人的客户端,他们改变了主意,因此我决定将一些数据存储为JSON对象。从php中查询JSON数据库对象php

我有一种匹配系统,我将注册匹配的用户存储为其用户ID数组的JSON对象版本。

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

两种方式我能想到做到这一点是:

  1. 查询每一个匹配和对象,然后JSON-解码使用in_array,看看他们在比赛中(这是我没有不做)。

  2. 只需使用LIKE查询来搜索“[userid]”(这是我所做的)的JSON文本。

有没有更好的方法来做这样的事情?像MySQL有更好的内置函数来实现这样的功能吗?

+1

为什么不将对象存储为每个属性字段的记录?我们可以看到对象的一个​​例子吗?将JSON字符串存储到数据库中并查询字符串的某些部分并不是一个好习惯。 –

+1

你为什么要在MySQL中存储json以开始? –

+0

您使用的是ORM吗?哪一个? – 2011-11-18 16:27:47

回答

4

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

如果你保持你的数据库至少在third normal form,你会发现你可以添加和更改用户属性,当你的客户改变主意时(再次......再次......再次......),因为更少的数据将保存在给定的表中,因此您可以添加和更改小型表,而不会产生巨大的系统范围影响。

数据库中的另一个选择是创建一个由id,name和value组成的表。

+0

我同意Chris的观点,您应该重新访问您的模式设计,并通过从数据库中提取数据而不是预先构建的JSON对象将JSON构造留在应用层。 –

+0

如果你在上面阅读我的评论,可以将它们结合起来。你能解释为什么它是一个错误?我认为,仅仅因为某事不应该以某种方式发挥作用并不意味着它不能或不应该。然而,如果它是一个表演的东西,那么我会立即放弃这一点。 – Rooster

+0

另外,如果你看看一个基于zend框架的社交引擎4这样的平台,看起来好像在一个网站上有一千个表被一千个表控制的事情真的会损害性能。 – Rooster