我插入每日出勤率。我想避免重复的条目。唯一列应该是月,日和ID。 我的条件是"如果该员工ID存在月份和日期(例如,如果员工#40已经在3月22日出席),则应该返回错误并且不应该继续插入。这是我的代码。
$avoid_double_entry = query("SELECT * FROM attendance WHERE
employee_id = '$employee_id' AND month = '$month' AND day = '$day' ");
confirm($avoid_double_entry);
if($row = fetch_array($avoid_double_entry)) {
echo "already exists";
} else {
echo "no records found";
<--proceed to insert query-->
但是,当我运行此代码时,以及第22天的条目,即使月份不是3月,员工ID也不是40,它表示已经存在。它也发生在当天不是22但月份是3月,反之亦然。
它只表示在不满足这三个条件时没有找到记录。我有点理解这一部分。我不明白为什么它已经存在,即使只满足一个条件。在此先感谢您的帮助。
我已经尝试过不查询WHERE NOT,DUPLICATE KEY UPDATE,但仍然无法弄清楚..
顺便说一下,这是我的确认功能,它运行正常,但以防万一。
function confirm($result) {
global $connection;
if(!$result) {
die("Query failed" . mysqli_error($connection));
}
}
答案 0 :(得分:0)
在执行SELECT
查询之前,您不需要执行INSERT
查询以防止重复输入。
您需要create a unique index over the multiple columns that must be unique in your table.
然后,执行INSERT
查询。不会插入重复项。如果遇到重复项时有其他列应更新,则可以使用ON DUPLICATE KEY UPDATE
。否则INSERT IGNORE
将阻止您在尝试插入重复项时(但仍未插入重复项)时出现任何错误。
此外,我强烈建议您将日期存储在单个日期类型列中,而不是将不同的日期部分存储在不同的列中。