开发者

Fastest way to check array items existence in mySQL table

User writes a series of tags (, separated) and posts the form.

I build an array containing the tags and开发者_StackOverflow中文版 delete dupes with array_unique() php function.

I'm thinking of doing:

  • go through the array with foreach($newarray as $item) { ... }
  • check each $item for existence in the tags mySQL table
  • if item does not exists, insert into tags table

Is there a FASTER or MORE OPTIMUM way for doing this?


I'm hoping that people can comment on this method. Intuition tells me its probably not the best way to go about things, but what do you all think?

Instead of making an extra call to the DB to find duplicates, just add a unique constraint in the DB so that tags cannot be inserted twice. Then use INSERT IGNORE... when you add new tags. This method will ignore the errors caused by duplications while at the same time inserting the new items.


You can call implode( ',' $array ) then use the IN SQL construct to check if there are existing rows in the db.

Example:

<?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 . ')';


I don´t know if it's faster, but you can use mysql's IN. I guess you'd have to try.


You could build up a big query and do it in one shot, instead of many little queries:

SELECT DISTINCT tag
  FROM my_tags
 WHERE tag in ( INPUT_TAGS )

Just build up INPUT_TAGS as a comma-separated list, and make sure you properly escape each element to prevent SQL injection attacks.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜