我正在创建一个php表单,将项目数据存储在一个唯一的项目名称下,然后将该数据存储到MySQL数据库中。
例如:
项目名称:Proj001
最大比赛速度(m/s):80
但是,我希望能够添加项目的新版本,同时保留项目数据的旧版本。如果可能的话,我想创建一个选项,这样用户就可以指定一个项目版本作为"默认"项目,以便在用户使用搜索引擎查找项目时显示。他们可以用其他方法切换搜索引擎上显示的默认项目。
例如:
项目名称:Proj001
最大比赛速度(m/s):85
Proj001已经存在!是否将此设置为默认值?是/否
(如果用户选择是,则在搜索Proj001时,最大比赛速度将返回85。如果用户选择否,则在搜索Proj001时,最大比赛速度将返回80)。
有可能用PHP/MMySQL做这样的事情吗?我不是在寻找任何代码,而是在寻找如何使用该语言使其工作的可能概念。
MySQL中没有任何内容表明行需要唯一标识符。这样做当然是一种常见的做法,但决不是必须的。
你肯定可以实现你的例子。显然,您需要一个布尔字段default
,每当用户输入值时,该字段都可以更新。当您收集用户输入时,只需从PHP运行SELECT
查询,如果有默认更新的结果提示,否则只需添加它即可。
在没有唯一标识符的情况下,您最常遇到的问题是更新行。举个例子,但假设用户再次输入80英里/小时作为最大速度。如果添加该行,则现在有两行将Proj001
和80
作为字段。SQL应该如何知道要更新哪一个?您总是可以将LIMIT 1
添加到查询中,只更新一行,但这至少应该提供一些关于为什么通常使用唯一字段的见解。
当然这是可能的。
您需要的是一个包含默认值的字段以及一个自动递增的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");
}
这将确保对于给定的项目名称,只存在一个默认名称。