Проверка на существующую запись перед вставкой данных - PullRequest
1 голос
/ 19 декабря 2011

Я пытаюсь вставить новых клиентов, только если они еще не существуют. У меня возникли проблемы с оператором SQL, но я также хотел указать контекст в PHP:

   $sql = "INSERT INTO clients
        (`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`,
        `studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`,
        `parentLastName`, `parentPhone`, `school`)
         VALUES ('$studentEmail', '$studentPassword', '$parentEmail',
        '$parentPassword', '$studentFirstName', '$studentLastName',
        '$studentPhone', '$parentFirstName', '$parentLastName', '$parentPhone', '$school')
        SELECT studentEmail
        FROM clients
        WHERE not exists (select * from clients where studentEmail == '"$studentEmail"')";

Ответы [ 4 ]

3 голосов
/ 19 декабря 2011

В операторе вставки select и values являются взаимоисключающими.Вместо:

insert table1 (col1, col2, col3, ...)
values (1, 2, 3, ...)
select col1
where  not exists (...)

Попробуйте:

insert table1 (col1, col2, col3, ...)
select 1, 2, 3, ...
where  not exists (...)
2 голосов
/ 19 декабря 2011

Вы должны проверить, существует ли электронная почта, прежде чем вставлять данные.

$check = mysql_query("SELECT studentEmail FROM clients WHERE  studentEmail = '{$studentEmail}';");

if (mysql_num_rows($check) == 0) {
    // insert
}
0 голосов
/ 19 декабря 2011

Если у вас есть уникальный индекс в поле электронной почты, тогда вы можете просто сделать INSERT IGNORE ..., и вставки, соответствующие существующим электронным письмам, будут тихо отброшены.

0 голосов
/ 19 декабря 2011

Вы можете использовать оператор MERGE:

merge into clients on (select 1 from clients where studentEmail = blabla)
when not matched then insert blabla

(синтаксис оператора слияния будет варьироваться в зависимости от вашей СУБД, поэтому посмотрите документацию для вашей конкретной реализации СУБД)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...