避免PHP中的重复ID

时间:2016-04-09 14:32:08

标签: php mysql

编辑:在Marcus回复后编辑的问题准确无误

我正在尝试实施图书馆管理,我的页面是订购书籍可以订购多少次,但不应该在一个页面上的两个不同选择中选择同一本书。在订单页面上,我有来自同一数据库的账面值的多个选择下拉列表:

<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>

并将它们添加到数据库表中,其中ID为记录的自动增量,bookID为存储书ID。我这样做:

$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());
    }

我不希望有两张同一本书ID的记录。简而言之,我想避免bookID上的重复条目。我试过&#34; INSERT IGNORE INTO&#34;但它不起作用。此外,如果选择重复的条目而不是忽略,我想显示错误。有什么想法吗?

编辑:表格结构:

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 ; 

1 个答案:

答案 0 :(得分:0)

列必须是独一无二的。现在,列上没有约束,允许它具有重复值。将列更改为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