在MySQL中存储数组?

Jas*_*vis 3 php mysql arrays

在Facebook FQL页面上它显示了FQL表结构,下面是一个截图,显示其中的一些(截图已经消失).

您会注意到某些项是一个数组,例如meeting_sex,meeting_for current_location.我只是很好奇,你认为他们将它作为一个数组存储在mysql中,或者只是将其作为一个数据返回,从这些数据中我真的认为它存储为一个数组.如果你认为它是,或者你做了类似的,那么将这些项作为数组存储到1个表字段中然后在PHP页面上将其作为数组检索的好方法是什么?

替代文字http://img2.pict.com/3a/70/2a/2439254/0/screenshot2b187.png

ang*_*son 11

将数组存储在数据库中的正确方法是将其存储为表,其中数组的每个元素都是表中的一行.

其他一切都是黑客攻击,最终会让你后悔你决定避免额外的桌子.


zom*_*bat 6

保证 Facebook不会将数据存储在数据库中的数组中.

你必须要了解的关于FQL的事情是你不是直接查询Facebook的主要数据服务器.FQL是一个shell,旨在为您提供对基本社交数据的访问,而不会让您在具有性能要求的真实服务器上运行疯狂查询.在主数据库上任意用户创建的查询将是功能性自杀.

FQL提供了一个设计良好的数据返回结构,可以方便您查询的数据类型,因此,任何可以具有多个关联的数据(例如"meeting_for")在获取之前都会打包到数组中作为API结果返回.

正如其他海报所提到的,在数据​​库(没有这些东西的概念)中存储编程语言结构(例如数组或对象)的唯一方法是将其序列化.序列化很昂贵,只要您序列化某些内容,就会使索引和搜索无法使用.作为一个社交网络,Facebook需要索引和搜索几乎所有内容,因此这些数据在主模式中永远不会以数组形式存在.

通常,您希望将序列化数据存储在数据库中的唯一时间是它是临时的,例如会话数据,还是您有有效性能要求的情况.否则,您的数据很快就会变得无用.


Der*_*sed 5

存储为数组有两种选择:

您提到的第一个是创建一个或多个表,并枚举您打算存储的每个可能的键.这是搜索和拥有合理数据的最佳选择.

但是,对于您想要做的事情,请使用serialize().注意:永远不要尝试以原生字符串形式搜索此数据.只需重新加载,调用unserialize(),然后搜索您的标准比开发一些疯狂的搜索模式来进行出价要快得多(并且更加精明).

编辑:如果是我,这是我正在认真开发的其他人使用(甚至自己使用,完全诚实),我可能会创建第二个查找表来存储所有键作为列; 哎呀,如果你这样做,mysql_fetch_assoc()只需运行一个快速的第二个查询就可以给你你想要的数组(或者你可以通过JOINed查询提取它们).但是,如果完成任何工作只是快速而肮脏,那么序列化数组可能适合您.除非你真的,真的不关心搜索那些数据,否则我认为大多数人都会认为正确的列间密钥关系是优越的.