MySQL在一个唯一名称下设置多个版本的数据

时间:2013-07-16 21:37:53

标签: php mysql

我正在创建一个php表单,用于将项目数据存储在一个唯一的项目名称下,然后将该数据存储到MySQL数据库中。

例如:

项目名称:Proj001

最高比赛速度(m / s):80

但是,我希望能够在保留较旧版本的项目数据的同时添加项目的较新版本。如果可能的话,我想创建一个选项,以便用户可以将项目版本指定为“默认”项目,以显示用户何时使用搜索引擎查找项目。他们可以使用其他方法切换显示在搜索引擎上的默认项目。

例如:

项目名称:Proj001

最高比赛速度(m / s):85

Proj001已经存在!这是默认的吗?是/否

(如果用户选择是,则在搜索Proj001时,最大赛车速度将返回85.如果用户选择否,则在搜索Proj001时,最大赛车速度将返回80)。

用PHP / MySQL做这样的事情有可能吗?我不是在寻找任何代码,而是寻找如何使用该语言使其工作的可能概念。

2 个答案:

答案 0 :(得分:0)

MySQL中没有任何内容表明行需要唯一标识符。这样做当然是通常的做法,但绝不是必需的。

你绝对可以实现你的例子。您显然需要一个布尔字段default,只要用户输入一个值就可以更新。只需在收集用户输入时从PHP运行SELECT查询,如果有结果提示进行默认更新,否则只需添加它即可。

在没有唯一标识符的情况下,最常遇到的问题是更新行。让我们举个例子,但是说用户再次以80英里/小时的速度输入最大速度。如果您添加该行,则现在有两行以Proj00180作为字段。 SQL如何知道更新哪一个?您始终可以在查询中添加LIMIT 1以仅更新1行,但这至少可以提供有关常用唯一字段的原因。

答案 1 :(得分:0)

当然有可能。

您需要的是一个包含默认值以及自动递增ID字段的字段。

正常插入插件。

对于你的set默认函数,会这样做(伪代码)。

 function setDefault($project_name, $id){
       $id = quoteAndSanatize($id);
       $project_name = quoteAndSanatize($project_name);
       $db->runQuery("UPDATE project set default = (id = $id) where name = $project_name");
 }

这将确保对于给定的项目名称,只存在一个默认值。

相关问题