2010-01-27 76 views
0

我正在與PDO連接mysql,我想對我用來檢查數據庫中是否存在tags的查詢有一些意見,並且要添加它在不是的情況下。PDO:檢查數據庫中的標籤存在,然後插入

// the tags are allready processed in $tags array 

$check_stmt = $connection->prepare ("SELECT * FROM tags WHERE tag_name = :tag_name"); 
$save_stmt = $connection->prepare ("INSERT INTO tags (tag_name) VALUES (:tag_name)"); 

foreach ($tags as $current_tag) { 
    $check_stmt->bindParam (':tag_name', $current_tag, PDO::PARAM_STR, 32); 
    $save_stmt->bindParam (':tag_name', $current_tag, PDO::PARAM_STR, 32); 
    $check_stmt->execute ($current_tag); 
    if ($check_stmt->rowCount() == 0) $save_stmt->execute ($current_tag); 
} 

我不能熟練使用數據庫,所以我不知道,如果查詢以及預計

+0

[哪個數據庫設計更快:唯一索引和INSERT IGNORE,或使用SELECT來查找現有記錄?](http://support.microsoft.com/kb/1328074/which-db-design-is-使用更快一個唯一的索引和插入-忽略 - 或選通) – outis 2012-01-24 02:02:42

回答

1

我會調整自己的選擇查詢了一下,以優化:

SELECT 1 AS found FROM tags WHERE tag_name = :tag_name LIMIT 1 

SELECT *從數據庫傳輸更多的數據(匹配記錄中的所有字段)超出必要的數據。只選擇你需要的領域是更有效,在這種情況下,它看起來像你只是檢查存在,所以你不需要任何記錄數據,因此選擇1.

極限1將查詢結果限制爲一條記錄,而不是全部匹配的記錄。更快的查詢執行和更少的數據傳輸。

0

一些比較髒的MySQL特定選項包括簡單地使用REPLACE INTO(不)或IGNORE關鍵字與INSERT(建議)的組合。 INSERT IGNORE語法將比分別執行SELECT更快一些。