Я вставляю дневную посещаемость. Я хочу избежать дублирования записей. Уникальные столбцы должны содержать месяц, день и идентификатор вместе. Мое условие: «если для этого идентификатора сотрудника существуют месяц и день (например, если уже есть явка на 22 марта для сотрудника № 40), он должен вернуть ошибку и не должен переходить к вставке. Это мой код.
$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, даже если месяц не март и идентификатор сотрудника не 40, он говорит, что уже существует. Также бывает, когда день не 22, а месяц март, и наоборот.
Он говорит, что записи не найдены, только если три условия не выполняются. Я вроде понимаю эту часть. Я не понимаю, почему он говорит, что уже существует, даже если выполняется только одно условие. Заранее спасибо за вашу помощь.
Я уже пробовал не запрашивать WHERE NOT, DUPLICATE KEY UPDATE, но все еще не могу понять ..
Кстати, это моя функция подтверждения, которая работает нормально, но на всякий случай.
function confirm($result) {
global $connection;
if (!$result) {
die("Query failed" . mysqli_error($connection));
}
}
вы можете отредактировать свой вопрос и поместить в него структуру таблицы?
Сделайте идентификатор, месяц, день ключом к вашей таблице, здесь вообще нет необходимости в каком-либо PHP.






Вам не нужно выполнять запрос SELECT перед выполнением запроса INSERT, чтобы предотвратить дублирование записей.
Вам нужно создать уникальный индекс по нескольким столбцам, который должен быть уникальным в вашей таблице.
Затем выполните запрос INSERT. Дубликаты вставляться не будут. Если у вас есть другие столбцы, которые следует обновить при обнаружении дубликатов, вы можете использовать ON DUPLICATE KEY UPDATE. В противном случае INSERT IGNORE предотвратит появление каких-либо ошибок при попытке вставить дубликаты (при этом не вставляя их).
Кроме того, я настоятельно рекомендую хранить даты в одном столбце типа даты, а не хранить отдельные части даты в разных столбцах.
Думаю, Тим снова потерял ключи.
Может быть, Тим подумал, что то, что вы опубликовали, было плагиатом на уже существующие вопросы и ответы? Кстати, меня зовут не Тим ;-)
Плагиат? В самом деле, @Funk? Вы думаете о каком-то конкретном?
Я не знаю, я не могу говорить за этого парня (или девушку). В некотором роде мне кажется, что это так.
@Funk Ну, надеюсь, что нет. Плагиат - серьезное обвинение. Я не из тех, кто обижается на случайное отрицательное голосование, но если кто-то действительно думает, что я что-то заимствовал, я хотел бы узнать об этом больше, чтобы я мог решить эту проблему. Если мой ответ похож на другой, то это чистая случайность. Надеюсь, это не похоже на что-то еще, достаточное для того, чтобы у кого-то возникло такое сомнение.
О, я никогда не говорил, что ты является плагиатом. Несомненно, совпадения случаются и случаются.
используйте
num_rowsвместо