非常快速的PHP MySQL交互
我正在寻找一种将某种函数转换成php和mysql的方法,它们会给我一个简单表中记录的id 我得到了一个id->value表,其中id是一个自动递增字段 我知道的自然方式或简单方式是:非常快速的PHP MySQL交互,php,mysql,Php,Mysql,我正在寻找一种将某种函数转换成php和mysql的方法,它们会给我一个简单表中记录的id 我得到了一个id->value表,其中id是一个自动递增字段 我知道的自然方式或简单方式是: $myId = Check('Cheese'); function Check($value) { $sql = "SELECT id FROM table WHERE value = '$value'"); $res = mysql_query($sql); if
$myId = Check('Cheese');
function Check($value) {
$sql = "SELECT id FROM table WHERE value = '$value'");
$res = mysql_query($sql);
if ($res)
return mysql_result($res,0);
// If the record doesn't exist then continue to insert the record
$sql = "INSERT INTO table (value) values ('$value')";
$res = mysql_query($sql);
return mysql_insert_id();
}
好的,我认为这是经典的方式。。但我认为必须有一个MySQL命令或一些使事情更简单的东西
我知道存在INSERT IGNORE,但是否有方法仅在不存在时进行选择并返回ID
我想做一些类似的事情:
从表中选择id
其中值='dummy'
如果不存在,那么
将值“dummy”插入表中
因此,我将一步获得ID,MySQL将解决这个问题,代码将更加高效或快速
假设我做了10000次如果您假设大多数检查调用很可能最终会导致插入,那么您可以执行INSERT IGNORE并使用mysql受影响的行检查是否有插入。如果没有insert,则可以从运行SELECT id并使用mysql\u insert\u id。但是,如果该行更可能存在,则最好先运行SELECT语句
如果节约资源是你的主要目标,那就是。您可能必须同时运行这两个查询,即使它们合并到一个语句中。如果您假设大多数检查调用很可能最终导致插入,那么您可以执行INSERT IGNORE并使用受mysql影响的行检查是否有插入。如果没有insert,则可以从运行SELECT id并使用mysql\u insert\u id。但是,如果该行更可能存在,则最好先运行SELECT语句
如果节约资源是你的主要目标,那就是。您可能需要同时运行这两个查询,即使它们被合并到一个语句中。您可能需要不存在的地方。请看下面的示例以了解情况:
插入到表值中选择不存在的id从表中选择*从表中选择value='thing to check'限制1您可能希望不存在的位置。请看下面的示例以了解情况:
插入到表值选择不存在的id从表中选择*从表中选择value='thing to check'限制1使用插入。。。关于重复密钥更新
function Check($value) {
$sql = "INSERT INTO table (value) values ('$value') ON DUPLICATE KEY UPDATE value='$value'";
$res = mysql_query($sql);
return mysql_insert_id();
}
需要mysql 5.1.12或更高版本使用插入。。。关于重复密钥更新
function Check($value) {
$sql = "INSERT INTO table (value) values ('$value') ON DUPLICATE KEY UPDATE value='$value'";
$res = mysql_query($sql);
return mysql_insert_id();
}
需要mysql 5.1.12或更高版本此功能也存在于5.0中,并且它需要值列上的唯一键。好的,谢谢,我确实需要在字符串上定义唯一索引,但它工作。此功能也存在于5.0中,它需要值列上有一个唯一的键。好吧,谢谢,我确实需要在字符串上定义唯一的索引,但它可以工作