#mysql #sql
Вопрос:
Я хочу очистить форум и создать таблицу пользователей для каждого отдельного пользователя, которого я вижу, и это выглядит так:
Стол:
user_id (primary key), name, date_seen
Поэтому, если я увижу нового невидимого пользователя, добавьте его в свою базу данных. Если новый пользователь уже находится в моей базе данных, не добавляйте его в мою базу данных.
Как я могу это сделать?
Комментарии:
1. Если имя пользователя или идентификатор уникальны (или используются в качестве первичного ключа), не нужно беспокоиться о дубликатах, потому что это не позволит вам их добавлять. Если вы вставляете несколько строк одновременно, вы можете использовать команду ВСТАВИТЬ ИГНОРИРОВАТЬ.
2. Вставляя несколько строк одновременно, вы имеете в виду: ВСТАВИТЬ В имя_таблицы (список столбцов) ЗНАЧЕНИЯ (value_list_1), (value_list_2), … (value_list_n);
3. Я не знаю, как вы выполняете свою вставку или откуда берутся ваши исходные данные (как вы очищаете). Вы записываете пользователей в файл? Потому что вы можете импортировать CSV и сделать все в одной строке: ЗАГРУЗИТЕ ЛОКАЛЬНЫЙ ФАЙЛ ДАННЫХ «filename.csv», ИГНОРИРУЕМЫЙ В ТАБЛИЦЕ …… Или, если значения поступают из другой таблицы, вы выполняете вставку из инструкции select.
Ответ №1:
Предположительно, под «невидимым пользователем» вы подразумеваете имя, а не идентификатор пользователя.
Вы можете использовать insert on duplicate key
. Начните с уникального индекса или ограничения на » имя:
create unique index unq_users_name on users(name);
Затем:
insert into users (name, date_seen)
values ($name, $date_seen)
on duplicate key update name = values(name);
Обратите внимание, что VALUES()
теперь это устарело в пользу немного другого синтаксиса, но он все еще работает.
Ответ №2:
Стандартный способ «вставить то, чего еще нет» в SQL-это использовать коррелированный подзапрос для проверки наличия:
insert into users (name, date_seen)
values ($name, $date_seen)
where not exists (select 1 from users where name = $name )
Этот метод не зависит от какого-либо нестандартного синтаксиса в вашей СУБД.