2014-09-24 4 views
0

У меня есть этот MySQL синтаксис:Некоторые проблемы с INSERT INTO заявления

INSERT INTO `utilizatori`(
    utilizator 
) 
SELECT 
    'Mama' 
FROM 
    `utilizatori` 
WHERE 
    NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama') 

utilizatori является таблица, utilizator столбец, Mama является значением

Этот синтаксис будет вставить значение в таблице, только если он не существует. Если существует значение, оно не создаст его, поэтому до сих пор оно работает нормально, но если значение «Мама» отсутствует, тогда оно будет вставляться ... единственная проблема заключается в том, что он будет вставлять его несколько раз. Например, если у меня есть 4 строки, он будет вставлять значение «Мама» 4 раза, создавая 4 строки. Любая идея?

+1

это вход? 'SELECT 'Mama'' sidenote: если это идентификатор, он должен использовать обратные ссылки – Ghost

+0

да, это вход, когда пользователь создает учетную запись, которую я хочу проверить, существует ли имя пользователя – Memphistoles

+2

, вы можете просто иметь поле' utilizator' для ' уникальный ', поэтому вам не нужно проверять каждый раз, если он уже существует, и если он не может быть вставлен, значит, он уже существует –

ответ

2

Я хотел бы сделать задачу проще, понятнее, делая utilizator поле unique.

Таким образом, при добавлении новых строк с существующим значением 'Mama' для utilizator в этом случае: MySQL возвращает ошибку с кодом: 1062, и не позволяет пользователю иметь несколько строк с Mama в таблице.

Так при выполнении запроса:

INSERT INTO `utilizatori` (utilizator) VALUES ('Mama') 

Вы можете проверить, если MySQL возвращает любую ошибку, но лучше, чтобы проверить количество изменяемых строк, если вставка была успешной, она будет равна 1 иначе 0.

Механизм проверки зависит от того, какой язык и драйвер вы используете для подключения к базе данных.

Поскольку ты PHP тег выбран, вы можете использовать PDO чем

$statement->rowCount(); // $statement = PDOStatement, I assume you know this thing well 

даст вам желаемый результат

Окончательная простой пример:

... 
if ($statement->rowCount()) 
{ 
    echo "Cool! You have been added to database"; 
} 
else 
{ 
    echo "Hmms! Are you trying to duplicate something?"; 
} 
+0

отлично, спасибо – Memphistoles

+0

добро пожаловать в любое время, рад помочь тебе ;)) –

1

Попробуйте использовать группу по:

INSERT INTO `utilizatori`(
    utilizator 
) 
SELECT 
    'Mama' 
FROM 
    `utilizatori` 
WHERE 
    NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama') 
group by utilizator 
+0

Вы также можете использовать синтаксис SELECT DISTINCT вместо 'GROUP BY' –

1

Вы в основном делают:

SELECT ... WHERE NOT EXISTS 

... и вставить это в таблице. Как указано в комментариях, просто сделайте свое поле utilizator уникальным и опустите всю часть SELECT из вашего запроса.

+0

и как могу ли я поставить условие, если значение существует, чтобы показать ошибку с «Значением уже существует»? – Memphistoles

+0

Это совсем другая история. В этом случае у вас будет несколько бит сценария (возможно, PHP и JavaScript), которые работают вместе, сначала запрашивая базу данных, чтобы узнать, существует ли она, возвращая результат и представляя ее пользователю. На уровне базы данных ограничение 'UNIQUE' предотвратит дублирование. – kasimir

1

Где Column отсутствует ...

INSERT INTO `utilizatori`(
    utilizator 
) 
SELECT 
    'Mama' 
FROM 
    `utilizatori` 
WHERE 
    'Mama' 
    NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama') 
+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «EXISTS» (SELECT 'utilizator' FROM' utilizatori' WHERE utilizator = 'Mama') 'в строке 1 – Memphistoles

Смежные вопросы