Избегайте дублирования идентификаторов в PHP

EDIT: Вопрос отредактирован, чтобы быть точным после ответа Маркуса

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

<select name="user"> <option value="1">Tony</option> <option value="2">Gary</option> <option value="3">Martin</option> <option value="4">Austin</option> <option value="5">Mark</option> </select> <select name="book[]"> <option value="1">Math</option> <option value="2">Geography</option> <option value="3">Science</option> <option value="4">Spanish</option> <option value="5">English</option> </select> <select name="book[]"> <option value="1">Math</option> <option value="2">Geography</option> <option value="3">Science</option> <option value="4">Spanish</option> <option value="5">English</option> </select> <select name="book[]"> <option value="1">Math</option> <option value="2">Geography</option> <option value="3">Science</option> <option value="4">Spanish</option> <option value="5">English</option> </select> 

И добавление их в таблицу базы данных с идентификатором как автоматическим приращением для записи и bookID для хранения идентификатора книги. Я делаю это с:

 $userID = $_POST['user']; foreach($_POST['book'] as $key=>$item_eid){ $bookID = intval($_POST['book'][$key]); mysql_query ("Insert INTO user_books (bookID, userID) values ('$bookID', '$userID' )") or die(mysql_error()); } 

Я не хочу иметь две записи одного идентификатора книги. Короче говоря, я хочу избежать дублирования записей в bookID. Я попробовал «INSERT IGNORE INTO», но это не сработало. Кроме того, я хочу показать ошибку, если выбраны повторяющиеся записи, а не просто игнорируются. Любые мысли об этом?

Изменить: Структура таблицы:

 CREATE TABLE IF NOT EXISTS user_books ( ID int(11) NOT NULL AUTO_INCREMENT, bookID int(11) NOT NULL, userID int(11) NOT NULL, added timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

Столбец должен быть УНИКАЛЬНЫМ. Прямо сейчас нет ограничений на столбец, который позволяет ему иметь повторяющиеся значения. Измените столбец на UNIQUE:

 ALTER TABLE user_books ADD UNIQUE (bookID); 

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

 ALTER IGNORE TABLE user_books ADD UNIQUE (bookID); 

Это сохранит первую найденную запись любых дубликатов и удалит остальные, т. Е. Представьте, что у вас 5 записей с bookID 100. Вышеупомянутый запрос сохранит первую запись с bookID 100 и автоматически удалит остальные 4.

Затем вы можете использовать INSERT IGNORE INTO после этого.