miker059
@miker059
Коротко не получится

Как составить запрос на удаление записей, которые отсутствуют в новом массиве?

Привет, Коллеги!

Ни как не могу решить как составить запрос.
Предположим , есть БД с одной таблицей, в ней 2 поля: login и password, login это primary key.
Поступает задача - залить в базу массив с элементами, причем элементы могут совпадать, с теми, что уже есть в базе, могут быть новые, и а могут быть удаленные, т.е. в базе они есть, а в новом массиве их нету. Причем если в базе элемент есть, а в массиве его нет, то из базы его надо удалить. Собственно, на этом шаге я и завис...
Помогите составить запрос, чтобы удалить из базы элементы отсутствующие в новом массиве.
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
miker059
@miker059 Автор вопроса
Коротко не получится
Решил при помощи php, вот так:
private function del_users($array){
		$count_del = 0;
		$rec = $this->mysqli->query("SELECT * FROM `".$this->config->db_name."`.`user`");
		$array_base = $this->result_set_to_array($rec);
		foreach ($array_base as $key => $user_base) {
			foreach ($array as $user) {
				if($user_base['login'] == $user['login']){
					unset($array_base[$key]);
					break;
				}
			}			
		}
		foreach ($array_base as $user_base) {
			$query = "DELETE FROM `".$this->config->db_name."`.`user` WHERE login = '".$user_base['login']."'";
			$this->mysqli->query($query);
			$count_del = $count_del + $this->mysqli->affected_rows;
		}
		return $count_del;
	}


немного кастыльно, но зато работает как надо))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@maxtm
Make money, not job
Сначала удалите все записи из таблицы (truncate), а потом вставьте ваши новые данные.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
как один из вариантов решения:
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)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы