Как составить запрос на удаление записей, которые отсутствуют в новом массиве?
Привет, Коллеги!
Ни как не могу решить как составить запрос.
Предположим , есть БД с одной таблицей, в ней 2 поля: login и password, login это primary key.
Поступает задача - залить в базу массив с элементами, причем элементы могут совпадать, с теми, что уже есть в базе, могут быть новые, и а могут быть удаленные, т.е. в базе они есть, а в новом массиве их нету. Причем если в базе элемент есть, а в массиве его нет, то из базы его надо удалить. Собственно, на этом шаге я и завис...
Помогите составить запрос, чтобы удалить из базы элементы отсутствующие в новом массиве.
как один из вариантов решения:
1. Удаляем записи которых нет в новом массиве:
DELETE FROM tablename WHERE login NOT IN ( 'login1', 'login2', 'login3');
2. Добавляем изменяем данные:
INSERT INTO tablename (login, password) VALUES ('login4', 'password4'), ('login5' , 'password5'), ON DUPLICATE KEY UPDATE password=values(password)
Все хорошо но когда Логинов может быть несколько тысяч)) решил задачупри помощи php, выбрал все записи из базы, перебором в цикле отобрал, те что отсутствуют в новом массиве, после чего удалил эти отобранные из базы. и только после дошло, что по сути новый массив это и есть новая база... и можно просто стереть все записи и записать из нового массива...
не всегда можно стереть, если у Вас к примеру есть FK или в таблице миллионы строк то стереть данные будет чревато либо потерей данных, либо задержкой по скорости.
P.S. вариант который я предложил для больших таблиц не подойдет, это так - один из вариантов решений, который можно использовать в определенных ситуациях для небольших объемов