2013-05-19 6 views
1

У меня есть две таблицы cw_users и ref_users, обе имеют столбец по имени id.Вставьте данные, если не существует

Я использую ISAM, поэтому не могу использовать внешний ключ. Итак, теперь я хотел вставить id из cw_users в ref_users, если его не было.

Это то, что я сделал, но не помогло:

$id = $_SESSION['id']; 
$ref_code=md5($id); 

mysql_query("INSERT INTO ref_users (id) VALUES ('$id') WHERE NOT EXISTS (SELECT FROM cw_users where id='$id')"); 
+0

«ВЫБЕРИТЕ», что из 'cw_users' в вашем предложении' NOT EXISTS'? – gmaliar

ответ

0

Правильный синтаксис INSERT IGNORE INTO

INSERT IGNORE INTO ref_users (id) 
VALUES ('$id') 

Это вставит, если значение не существует, и игнорировать заявление, если оно делает.

Обратите внимание, что это будет работать только если id является первичный ключ

EDIT: кажется из ваших комментариев, что вы были бы гораздо лучше использовать ON DUPLICATE KEY UPDATE.

Попробуйте этот запрос

INSERT INTO ref_users(id, ref_code) 
VALUES ('$id', '$ref_code') 
ON DUPLICATE KEY UPDATE 
ref_code = '$ref_code' 
+0

Да, я добавил первичный ключ, но все же он не сработал, –

+0

Показана ли вам ошибка? – Achrome

+0

Это весь код, который я использую: ' ' –

0
...WHERE NOT EXISTS (SELECT id FROM ... 
+0

Не помогает ... –

0

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

+0

Да, это сработало, самое простое решение, спасибо! –

+0

Нет, это сработало. Я добавил два запроса: тот, который вставляет 'id', не работает, если он уже существует, а другой работает, хотя ответ, данный @Ashwin Mukhija, был более уместным. –

0

Ваш запрос

"INSERT INTO ref_users (id) VALUES ('$id') WHERE NOT EXISTS (SELECT FROM cw_users where id='$id')" 

Вы не можете использовать не учитывался в запросе вставки. вы можете использовать обычную вставку.

+0

Да, я понял, спасибо –