Информация
Я написал скрипт php, который принимает файл csv и загружает его в базу данных MySQL. В этом сценарии я проверяю наличие дубликатов на основе четырех столбцов: first_name, last_name, birthdate и phone.
$duplicateQuery = mysqli_query($conn, "SELECT * FROM students
WHERE first_name ='$firstName'
AND last_name ='$lastName'
AND birthDate = '$dateOfBirth'
AND phone='$homeNumber'");
Если запрос возвращает 0, он уникален, и элемент вставляется в базу данных. Тем не менее, скрипт, который я хочу загрузить, содержит много ошибок ввода (в одном из четырех столбцов). Следовательно, у меня есть четыре других утверждения, каждое из которых выбирает, если три из четырех элементов идентичны.
$duplicateQueryCase1 = mysqli_query($conn, "SELECT * FROM students
WHERE first_name ='$firstName' AND last_name ='$lastName'
AND birthDate = '$dateOfBirth'");
$duplicateQueryCase2 = mysqli_query($conn, "SELECT * FROM students
WHERE first_name ='$firstName' AND last_name ='$lastName'
AND phone='$homeNumber'");
$duplicateQueryCase3 = mysqli_query($conn, "SELECT * FROM students
WHERE first_name ='$firstName' AND birthDate = '$dateOfBirth'
AND phone='$homeNumber'");
$duplicateQueryCase4 = mysqli_query($conn, "SELECT * FROM students
WHERE last_name ='$lastName' AND birthDate = '$dateOfBirth'
AND phone='$homeNumber'");
Вопрос
Если это так, я хотел бы открыть всплывающее сообщение для отображения информации о каждом элементе, который затем предлагает пользователю выбрать, какой из элементов он хотел бы сохранить. Я планирую ничего не делать и оставить первый элемент, если они выберут первый вариант, иначе обновлю информацию в MySQL до второго элемента. Я зашла в тупик в своем подходе к этой проблеме, проверяю каждый из запросов, а затем использую всплывающее окно с формами, хороший метод или есть более эффективный способ сделать это. Понимание будет высоко ценится.
Одной из областей улучшения может быть использование одного запроса, чтобы определить, должна ли быть вставлена строка или должен быть задан вопрос о пользователе.
Следующий запрос подсчитает количество 4 столбцов, которые соответствуют как оценка. Счет возвращает количество совпадающих столбцов и только те строки, в которых совпадают не менее 3 столбцов.
SELECT
`id`,
`first_name`,
`last_name`,
`birthdate`,
`phone`,
IF(`first_name` = '$firstName',1,0) +
IF(`last_name` = '$lastName',1,0) +
IF(`birthdate` = '$birthdate',1,0) +
IF(`phone` = '$phone',1,0) as `score`
FROM students
WHERE
IF(`first_name` = '$firstName',1,0) +
IF(`last_name` = '$lastName',1,0) +
IF(`birthdate` = '$birthdate',1,0) +
IF(`phone` = '$phone',1,0) >= 3
Других решений пока нет …