Before inserting into the database, I'm using the following code to check for duplicates. To me, a duplicate is only considered a duplicate when name
, description
, price
, city
, and enddate
match.
foreach($states_to_add as $item) {
$dupesql = "SELECT
COUNT(*)
FROM
table
WHERE
(
name = '$name'
AND description = '$description'
AND manufacturer = '$manufacturer'
AND city ='$city'
AND price = '$price'
AND enddate = '$end_date'
)";
$duperaw = mysql_query($dupesql);
if($duperaw > 0) {
echo nl2br("$name already exists in $city \n");
}
else {
$sql = "INSERT INTO table (..... (here go the values to be inserted)
....
Each value is defined prior to running through this checking, my result always comes back as item already exists. I dumped "dupesql" and copy/pasted the command into phpmyadmin which comes back with count 0.
You can still run into race conditions where 2 users try to insert dups at the same time, checking for dups using a select statement simultaneously gives both users the go ahead to insert their records. I prefer to set unique index on the DB and then catch the error that bubbles up from the DB.