非常快速的PHP MySQL交互

非常快速的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

我正在寻找一种将某种函数转换成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 ($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中,它需要值列上有一个唯一的键。好吧,谢谢,我确实需要在字符串上定义唯一的索引,但它可以工作