我有这个mysql语法:
INSERT INTO `utilizatori`(
utilizator
)
SELECT
'Mama'
FROM
`utilizatori`
WHERE
NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama')
utilizatori
是一个表格,utilizator
是一列,Mama
是一个值
这个语法只有在它不存在的情况下才会在表中插入一个值。如果值存在则不会创建它,所以直到现在它工作正常,但是如果没有'Mama'值,那么它将插入它..唯一的问题是它会多次插入它。例如,如果我有4行,它将插入'妈妈'值4次,创建4行。任何想法??
答案 0 :(得分: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?";
}
答案 1 :(得分:1)
尝试使用group by:
INSERT INTO `utilizatori`(
utilizator
)
SELECT
'Mama'
FROM
`utilizatori`
WHERE
NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama')
group by utilizator
答案 2 :(得分:1)
你基本上是这样做的:
SELECT ... WHERE NOT EXISTS
...并将其插入您的表格中。如评论中所述,只需将您的utilizator
字段设为唯一,然后从查询中删除整个SELECT
部分。
答案 3 :(得分:1)
缺少列...
INSERT INTO `utilizatori`(
utilizator
)
SELECT
'Mama'
FROM
`utilizatori`
WHERE
'Mama'
NOT EXISTS (SELECT `utilizator` FROM `utilizatori` WHERE utilizator='Mama')