如果在一个查询中选择行=='0',如何插入?

时间:2013-11-25 03:59:51

标签: mysql sql

在mysql中,我有以下内容:

结构Table

id(int primary key)
name(varchar 100 unique)

值:

id  name

1   test
2   test1

我有两个问题:

1)SELECT count(*) FROM Table WHERE name='test'

2)如果count选择行== 0秒查询INSERT INTO Table (name) VALUES ('test')

我知道可以使用:

$res = mysql(SELECT count(*) as count FROM Table WHERE name='test');
// where mysql function make query in db

$i = $res -> fetch_assoc();

if($i['count'] < 1 ){$res = mysql(INSERT INTO Table (name) VALUES ('test');}

但我想知道如何在一个查询中进行两次查询。

如何在两个内部进行一次查询?

3 个答案:

答案 0 :(得分:4)

你可以用一个简单的技巧来做到这一点:

insert into Table1(name)
select 'test' from dual
where not exists(select 1 from Table1 where name='test');

如果您在此列上没有主键,这甚至可以使用。

说明:DUAL是一个特殊的虚拟表,仅在此处引用以启用WHERE子句。没有FROM子句(如select 'test' where not exists(select 1 from Table1 where name='test')),你将无法拥有一个语句,因为它不完整。

答案 1 :(得分:2)

假设您的name列有UNIQUE个约束,只需将IGNORE添加到INSERT语句中。

INSERT IGNORE INTO Table (name) VALUES ('test')

如果特定值已存在记录并返回0个受影响的行,则会跳过插入。请注意,主键也被视为UNIQUE约束。

如果name列没有这样的约束,我建议您添加一个:

ALTER TABLE `Table` ADD UNIQUE(name)

另请参阅INSERT

的文档

答案 2 :(得分:0)

如果您不需要检查是否有重复,其他人的建议对您有好处。但是你需要使用'INSERT'并检查错误号如下:

mysql_query('INSERT INTO ...');

if (mysql_errno() == 1062)
{
    echo "duplicated";
}
else
{
    echo "inserted";
}

(我知道不推荐使用mysql_XXXX()..只是示例)