2014-10-02 3 views
0

Я использую Stack Overflow все лето, чтобы получить мой веб-проект в Интернете, и у меня его было достаточно, поэтому я сделал его общедоступным. Однако у меня есть один маленький камень в моей обуви, который я хотел бы исправить.Предотвращение дублирования в базе данных, а не в столбце ID

Я пробовал все предлагаемые здесь предложения INSERT IGNORE, чтобы предотвратить дублирование ввода данных в строке, отличной от идентификатора (который является основным столбцом). Моя веб-страница - www.lostdots.com, и я хочу, чтобы кто-то дважды входил в одно доменное имя, так как это сделает базу данных неопрятной.

Я использовал:

PRIMARY KEY (id, namebox1))"); 
    foreach($form_data as $name=>$value) 
    { 
    mysql_query("ALTER TABLE $mysql_table ADD $name VARCHAR(255)"); 
    } 
    mysql_query("INSERT IGNORE INTO 
     $mysql_table (`DATESTAMP`, `TIME`, `IP`, `BROWSER`) 
      VALUES ('".date("Y-m-d")."', 
      '".date("G:i:s")."', 

я понял, что, делая «namebox1» первичный ключ было бы предотвратить дублирование, и «Insert игнорировать» помешают сообщение об ошибке. Так что я делаю неправильно? Я знаю, что я должен был переходить в MySQLi, но я хотел бы перебирать один мост за раз. Любые идеи GURU?

спасибо, Аластер

+0

это строка, в которой вы не хотите, чтобы записи duplacte были уникальными? – Andre

+0

думаю. Я узнал, как немного запустить код, но я должен был идти первым. Имена доменов введены пользователем, и чтобы кто-то не добавлял их имя для рекламы более одного раза, я хотел предотвратить дублирование. Но я в тупике. –

+0

try ALTER TABLE 'table_name' \t ДОБАВИТЬ УНИКАЛЬНЫЙ ИНДЕКС' имя_домена_column' ('domain_name_column'); чтобы значения столбца были уникальными, тогда INSERT IGNROE должен работать – Andre

ответ

0

Просто настроить уникальный индекс столбца.

ЕСЛИ у вас есть PHPMyAdmin, просто нажмите «уникальный» под столбцом, который вы хотите установить уникальным. Вы найдете эту кнопку в разделе «Структура» обзора целевой таблицы.

Incase у вас нет PHPMyAdmin вы можете решить эту проблему путем изменения схемы вашей с сырым запроса:

ALTER TABLE `table_name` ADD UNIQUE (`column_name`); 

И вуаля, вы сделали. MySQL не будет принимать никаких дополнительных повторяющихся значений в целевом столбце.

Конечно, вы должны проверить свою вставку с уведомлением об отправке, чтобы сообщить о (функция «электронная почта уже взята» или что-то еще для этого уникального индекса) и создать собственное сообщение об ошибке, поскольку вы пытаетесь вставить дублирующее значение MySQL выдаст ошибку, и это может запутать и и пользователь, особенно если вы используете конструкции, такие как

$result = mysql_query(...); 
if($result == false) die("An error occured"); 

Учтите, что это будет работать только если целостность требуется для индекса дается, довольно много средств: Там в настоящий момент не должно быть дубликатов значений в таблице или вы не можете настроить индекс. Если у вас уже есть повторяющиеся данные в таблице, вы должны подумать о том, возможно ли сбросить данные или изменить все ключи вручную.

(Помните, что если столбец установлен с нулевым значением (он содержит значения NULL), это значение всегда может отображаться несколько раз, независимо от того, что указывает этот индекс).

В самом последнем упоминании: mysql_query - устаревшая библиотека и будет удалена в будущем. Пожалуйста, подумайте об обновлении до более экономного, более эффективного и удобного в обращении библиотек. http://php.net/manual/en/book.mysqli.php или http://php.net/manual/en/book.pdo.php

+0

Cheers Chaps. Новые идеи попробовать. Думал, что я действительно застрял. –

+0

Я думал, может быть, триггер MySQL? –

+0

Звучит неплохо, я буду играть с обоими этими опциями, поэтому спасибо Steini & Andre –

0

Сделайте свой столбец domain_name UNIQUE.

Для улучшения: попробуйте выбрать данные из таблицы по доменному имени. если количество строк больше 0, то это среднее имя домена уже существует в таблице. если нет после этого insert.

поэтому используйте оба для UNIQUE и выберите запрос.

+0

Можете ли вы представить, что если кто-то просит такого решения, он не знает, что такое индекс базы данных? Поэтому говорить ему, что он ставит свой стол уникальным, ничего не решает. Лучше помогите, сообщив, что ему, как настроить, или вы можете поместить свой намек в комментарии. – Steini

+0

Я не знаю о индексах базы данных? У меня только 1 база данных для этого сайта, может быть, я должен разделить данные формы? –

+0

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

Смежные вопросы