php
  • mysql
  • 2010-07-19 80 views 1 likes 
    1

    我正在尋找一種方法,使某種功能進入PHP和MySQL誰給我作爲一個簡單的表中的記錄的ID。非常快速的PHP-MySQL交互

    我得到了一個id - >值表,其中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命令或誰使事情變得更簡單一些。

    我知道有一個插入IGNORE,但有沒有辦法讓選擇只有當不存在,並返回ID?

    我想要做的事,如:

    選擇ID從表 其中value = '假' 如果不存在,則 INSERT INTO表(值)值( '假')

    所以我將獲得的ID在一個步驟和MySQL將解決這一問題和代碼的效率會更高或快速..

    (想象一下,我有使這10000次)

    回答

    3

    使用INSERT。 ..對重複密鑰更新

    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或更高版本

    +0

    此功能也存在於http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html中,它需要'value'列上的唯一鍵。 – ceteras 2010-07-19 06:43:30

    +0

    好吧,對我來說感謝這是真的,我需要定義字符串上的唯一索引,但它的工作原理 – diego2k 2011-06-19 23:13:47

    0

    如果您在假設很可能大多數Check()調用最終會導致INSERT,那麼您可以執行INSERT IGNORE並使用mysql_affected_rows來檢查是否存在插入。如果沒有插入,則可以運行SELECT id FROM並使用mysql_insert_id()。但是,如果該行更可能存在,那麼最好先運行SELECT語句。

    http://php.net/manual/en/function.mysql-affected-rows.php

    如果節約資源是你的主要目標。即使將它們合併爲一個語句,您可能也必須運行這兩個查詢。

    0

    您可能想要WHERE不存在。看看下面的示例,以得到一個想法:

    INSERT INTO表(值)SELECT ID WHERE NOT EXISTS(SELECT * FROM表WHERE值= '的事情來檢查')LIMIT 1

    +0

    但是這將返回ID,如果它已經存在? – casablanca 2010-07-19 02:03:33

    相關問題