2013-08-18 4 views
3

У меня есть таблица, это структура,Обнаружение повторяющихся значений

companies - table 
id 
name 
url 
logo 

Из этой таблицы я хочу, чтобы проверить, существует ли уже имя, URL существует, логотип существует перед вставкой. имя, URL и логотип должны быть уникальными. Я могу проверить, например:

SELECT * FROM companies WHERE name='$name' OR url='$url' OR logo='$logo' 

и подсчитать количество записей. Из вышеприведенного запроса, все равно, я могу определить, какое поле дублируется? Таким образом, я могу отображать это поле как дублирующее, отображая ошибки в представлениях.

Благодаря

+0

Side Примечание: Не 'SELECT *' и подсчитывают возвращаемые строки - используйте 'SELECT COUNT (*) 'вместо этого. – Stobor

+1

@Stobor С другой стороны, фактическое подсчет возвращаемых строк - это именно то, что требуется OP, поскольку они также могут проверять значения столбца в процессе и видеть, какие дубликаты. –

+0

@ lc. Хорошее отражение - в этом случае возвращается не более трех строк (из-за ограничения уникальности), и данные могут быть использованы, поэтому нет никакого существенного штрафа за возвращение всего ... – Stobor

ответ

0

да, можно .. как вы должны быть помещены «идентификатор» в качестве первичного ключа для таблицы.

вы можете сделать некоторые вещи, как добавление уникального ключа с logo, а затем индексация name , url, logo уникальными.

и попробовать этот

SELECT `id` FROM companies WHERE name='$name' AND url='$url' AND logo='$logo' 

и показать ошибку дублирования, если вы столкнулись с какой-либо такое значение.

0

это ваш выбор запроса.

SELECT name,url,logo FROM companies WHERE name='$name' OR url='$url' OR logo='$logo'; 

затем цикл результаты

$num_of_records=0; 
while($row = mysqli_fetch_array($result)) 
{ 

if($name==$row['name']) 
{ 
    echo . " name -> " . $row['name'] ." duplicated "; 
    echo "<br>"; 
} 
else if($url==$row['url']) 
{ 
    echo . " url -> " . $row['url'] ." duplicated "; 
    echo "<br>"; 
} 
else if($logo==$row['logo']) 
{ 
    echo . " logo -> " . $row['logo'] ." duplicated "; 
    echo "<br>"; 
} 
$num_of_records++; 
} 

эхо "число записей ->" $ num_of_records.

2

Вы можете создать уникальный ключ, который заставит ваши вставки на провал - это позволяет избежать необходимости два запроса:

ALTER TABLE `companies` ADD UNIQUE (
`url`, 
`name`, 
`logo` 
); 
Смежные вопросы