编辑:在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 ;
答案 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
。