2011-12-12 119 views
2

我有一個100個值的列表(可能在將來擴展),我需要將其放入數據庫。然而,當其中一個已經存在時,我需要知道它是哪一個,並從桌子上的行中獲取一些信息。這是目標。但我想不出一個有效的方法來做到這一點。有效檢查組中是否存在任何值以及它是哪一個?

事情我已經想到了

  • 檢查值存在。如果沒有,請提交。這是按價值完成的。優點:容易。缺點:緩慢(最少100條查詢,最多200條查詢)
  • 與上述相反。如果查詢由於重複鍵約束而失敗,請查詢該值。同樣的優點和缺點
  • 一次插入所有值。運行重複檢查器。優點:2(儘管很大)的查詢。缺點:困難,可能很慢

必須有更好的方法。有任何想法嗎?

回答

4

如果我理解正確的話,另一種選擇是選擇在一個查詢匹配列表中的數據庫中的所有行,然後檢查array_intersect()在應用程序代碼中找出那些已經在數據庫中存在,或者array_diff()找到那些別噸。

// Your list into a comma-separated string 
$your_list = implode(",", $your_list); 

$dbexists = array(); 
$result = mysql_query("SELECT id FROM tbl WHERE id IN ($your_list)"); 
while ($row = mysql_fetch_assoc($result)) { 
    $dbexists[] = $row['id']; 
} 

// Already existing from your set: 
$exists = array_intersect($your_list, $dbexists); 
+0

哇,我從來沒有想到這一點。只有2(大)查詢效率,似乎它會相當快。我會嘗試的。謝謝! – TheLQ

+0

@TheLQ如果你沒有在主鍵上查詢,你可能需要一個索引來處理巨大的IN()子句,但它會在循環中擊敗一堆查詢。 –

相關問題