在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');}
但我想知道如何在一个查询中进行两次查询。
如何在两个内部进行一次查询?
答案 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()..只是示例)