簡體   English   中英

檢查mySQL表中數組項是否存在的最快方法

[英]Fastest way to check array items existence in mySQL table

用戶編寫一系列標簽(分開)並發布表單。
我建立了一個包含標簽的數組,並使用array_unique() php函數刪除了重復對象

我正在考慮這樣做:

  • 用foreach($ newarray as $ item){...}遍歷數組
  • 檢查標簽mySQL表中每個$ item是否存在
  • 如果項目不存在,則插入標簽表

有沒有更快或更理想的方式來做到這一點?

我希望人們可以對此方法發表評論。 直覺告訴我,這可能不是解決問題的最佳方法,但是你們都怎么想呢?

不必對數據庫進行額外的調用以查找重復項,而只需在數據庫中添加唯一約束,以使標簽不能插入兩次。 然后在添加新標簽時使用INSERT IGNORE... 在插入新項目的同時,此方法將忽略由於重復導致的錯誤。

您可以調用implode( ',' $array )然后使用IN SQL構造檢查數據庫中是否存在行。

例:

<?php
   $arr = ...
   $sql = 'SELECT COUNT(*) FROM table WHERE field IN ( ' . implode( ',', $arr ) . ' );';
   $result = $db->query( $sql );
?>
$tags = array('foo', 'bar');

// Escape each tag string
$tags = array_map('mysql_real_escape_string', $tags, array($sqlCon));

$tagList = '"' . implode('", "', $tags) . '"';

$qs = 'SELECT id FROM tag_list WHERE tag_name IN (' . $tagList . ')';

我不知道它是否更快,但是您可以使用mysql的IN 我想你得試試看。

您可以建立一個大查詢並一次性完成,而不是進行許多小查詢:

SELECT DISTINCT tag
  FROM my_tags
 WHERE tag in ( INPUT_TAGS )

只需將INPUT_TAGS建立為以逗號分隔的列表,並確保您正確地轉義了每個元素以防止SQL注入攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM