Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和MySQL动态推出新站点功能_Php_Mysql - Fatal编程技术网

使用PHP和MySQL动态推出新站点功能

使用PHP和MySQL动态推出新站点功能,php,mysql,Php,Mysql,首先:我的问题可能会引发无数的意见,我相信我所寻找的可以通过多种方式实现 背景: Google+和Facebook等网站向其用户推出新功能,有时是少数用户,有时是向整个公众推出新功能。推出新的网站功能和特性可能是许多网站所做的,包括这里提到的网站 就我而言: 我有一个菜单,网站上的每个用户都可以随时访问。这意味着它的行为有点像Windows中的“开始”菜单,这是一种非常熟悉的方式。现在,我的这个菜单是根据一些PHP代码的请求绘制的。目前,我有一个多维数组,其中包含所有用于导航的菜单项和链接。这个

首先:我的问题可能会引发无数的意见,我相信我所寻找的可以通过多种方式实现

背景:

Google+和Facebook等网站向其用户推出新功能,有时是少数用户,有时是向整个公众推出新功能。推出新的网站功能和特性可能是许多网站所做的,包括这里提到的网站

就我而言:

我有一个菜单,网站上的每个用户都可以随时访问。这意味着它的行为有点像Windows中的“开始”菜单,这是一种非常熟悉的方式。现在,我的这个菜单是根据一些PHP代码的请求绘制的。目前,我有一个多维数组,其中包含所有用于导航的菜单项和链接。这个想法是,当一个新特性发布时,我会将它添加到多维数组中(稍后由数据库生成),PHP代码会将它作为一个带有(new!highlight mark)的新项呈现在菜单中

我的主要问题:

使用数据库表的方法是向用户启用/禁用和推出新功能的好方法吗

我想要实现的示例:


赏金:为了得到我问题的好答案,我将放弃50点声誉积分。非常感谢。

对于一个近乎静态的菜单,如果希望得到一致的结果,您应该避免经常连接到数据库并运行
选择
查询

保存菜单内容的数组可以使用PHP的
serialize()
json\u encode()函数保存到另一个文件中。您必须操作菜单表的代码将在进行更改时调用它们来更新静态文件。PHP组件将从这些文件加载以创建菜单,而不是从数据库加载


另一种方法是将
json_encode()
内容放入站点的一个JavaScript文件中,将其包含在页面中,并使用JavaScript绘制菜单。浏览器将缓存该文件,更新后,您可以更改文件名或增加其中的计数器,还可以更改包含行,也许
,以便浏览器加载更新的内容。

认为您可能是对的,这个问题可能会引发不同的意见;-)。国际海事组织,你问题的关键部分用黑体字表示如下:

Google+和Facebook等网站向用户推出新功能, 有时是少数用户,有时他们向整个公众推出新功能

数据库是否有包含所有已知用户的
User
表或类似表?如果是这样,则有必要提供选择向选定用户推出功能的灵活性,可能是手动选择的,也可能是基于他们的角色、地理位置、配置文件等标准。在这种情况下,最有意义的是利用数据库的关系功能,例如,通过
UserFeature
(*)等中介创建
Feature
表和与
User
的多对多关系。这将避免未来与动态用户数据相关的维护难题


(*)或选择您自己的首选粒度这不是答案。仅仅是一个信息性的回答,@Mike.k和@SteveChambers都提供了有趣的输入,然而,他们都没有提供一个有证据的直接解决方案。无论如何,我把第一个答案标记为“答案”,第二个我投了+1。谢谢。我会让一些版主或管理员在7天结束时决定奖金D

此线程已正式关闭

for(;;) { print(":D"); }

我可以将菜单项存储在会话和Cookie中,避免在必须呈现的所有时间连接数据库。我主要关心的是,如果数据库方法足够好,例如,可以存储要呈现的项,使用标志列启用/禁用项,使用另一列存储列表顺序,每次添加新功能时,都会将其作为一项添加到表中,系统会在数组中提取并呈现它。会话可以用于此功能,而数据库也可以用于此功能。两者的问题在于规模。每个会话都将数据存储在本地文件中,因此您必须检查是否有足够的空间来支持您期望的人数。每个数据库连接和查询都消耗了一些资源,因此,根据预期的负载,你应该找出什么是理想的,也可以考虑一个攻击场景,如果有人想用你的服务器填充磁盘空间来填充磁盘空间呢?听起来好像你在PosiTICK到DB中有一个很好的过程。将支付长期。目前我有一个多维数组,其中包含所有的菜单项和导航链接。。。我们这里说的巢有多深?是否支持完整的导航树?在这种情况下,正如mike.k的回答所述,您可以将结果集缓存在序列化文本文件中(serialize比json_encode稍快,所以如果您不使用ajax)。如果您有一个深度嵌套的层次结构,那么就值得考虑XML,因为您通常会将树上最低分支的nav id传入(可能作为GET变量)。DOMDocument/XML允许您轻松获取该特定节点(getElementById),并以自己的方式返回树,以确定哪些节点应处于活动状态,而无需使用混乱的递归循环。@CD001感谢dude的提示。Steve Chambers,我没有使用关系数据库连接,例如外键等。特别是,因为从长远来看,这可能会变得一团糟。我利用PHP本身,通过在表中某处设置用户id等来跟踪这一点。