Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果在一个查询中选择行==“0”,如何进行插入?_Mysql_Sql - Fatal编程技术网

Mysql 如果在一个查询中选择行==“0”,如何进行插入?

Mysql 如果在一个查询中选择行==“0”,如何进行插入?,mysql,sql,Mysql,Sql,在mysql中,我有以下内容: 结构表: 价值观: id name 1 test 2 test1 我有两个问题: 1从name='test'所在的表中选择count* 2如果计数选择行==0秒,则将查询插入表名值“test” 我知道可能会用到: $res = mysql(SELECT count(*) as count FROM Table WHERE name='test'); // where mysql function make query in db $i = $res

在mysql中,我有以下内容:

结构表:

价值观:

id  name

1   test
2   test1
我有两个问题:

1从name='test'所在的表中选择count*

2如果计数选择行==0秒,则将查询插入表名值“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');}
但我想知道如何在一个查询中进行两个查询

如何在两个查询中进行一个查询?

假设您的名称列具有唯一约束,只需将IGNORE添加到INSERT语句中即可

INSERT IGNORE INTO Table (name) VALUES ('test')
如果某个特定值的记录已存在并返回0个受影响的行,则此操作将跳过插入。请注意,主键也被视为唯一约束

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

ALTER TABLE `Table` ADD UNIQUE(name)
另请参见

的文档假定您的名称列具有唯一约束,只需将IGNORE添加到INSERT语句中即可

INSERT IGNORE INTO Table (name) VALUES ('test')
如果某个特定值的记录已存在并返回0个受影响的行,则此操作将跳过插入。请注意,主键也被视为唯一约束

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

ALTER TABLE `Table` ADD UNIQUE(name)

另请参见

的文档。您可以使用以下简单技巧完成此操作:

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

if (mysql_errno() == 1062)
{
    echo "duplicated";
}
else
{
    echo "inserted";
}
如果此列上没有主键,这甚至可以工作


说明:DUAL是一个特殊的虚拟表,这里引用它只是为了启用WHERE子句。如果没有FROM子句(如select'test'where not exist)则无法生成语句从表1中选择1,其中name='test'将不完整。

您可以使用一个简单的技巧来完成此操作,如下所示:

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

if (mysql_errno() == 1062)
{
    echo "duplicated";
}
else
{
    echo "inserted";
}
如果此列上没有主键,这甚至可以工作


说明:DUAL是一个特殊的虚拟表,这里引用它只是为了启用WHERE子句。如果没有FROM子句(如select'test'where not exist)您将无法生成一条语句从表1中选择1 where name='test',因为它将不完整。

如果您不需要检查是否存在重复,其他人的建议对您有好处。但您需要使用“插入”并检查错误号,如下所示:

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

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

我知道mysql_XXXX已被弃用。。举个例子

如果你不需要检查是否有重复,别人的建议对你有好处。但您需要使用“插入”并检查错误号,如下所示:

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

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

我知道mysql_XXXX已被弃用。。仅举一个例子

…假设您传入一个主键,而在这样的插入中通常不会传入主键。另外,不要使用mysql函数,它们已被弃用。@scrowler所有的INSERT IGNORE、REPLACE、INSERT。。在重复错误时,需要该表具有PK或UNIQUE。所以我想是的,你的例子不though@scrowler对不起,我的英语不好。你能详细说明一下吗?即使表格有PK还是唯一?我的代码无法检查重复错误?请将INSERT插入到表nonprimaryfield1、nonprimaryfield1、nonprimaryfield1的值“john”、“test”、“hello”-这将永远不会引发重复错误,因为主键将始终递增。由于这是标准PHP SQL查询最常见的格式,所以您的答案在大多数情况下可能不适用……只要您传入一个主键,通常不会在这样的插入中使用主键。另外,不要使用mysql函数,它们已被弃用。@scrowler所有的INSERT IGNORE、REPLACE、INSERT。。在重复错误时,需要该表具有PK或UNIQUE。所以我想是的,你的例子不though@scrowler对不起,我的英语不好。你能详细说明一下吗?即使表格有PK还是唯一?我的代码无法检查重复错误?请将INSERT插入到表nonprimaryfield1、nonprimaryfield1、nonprimaryfield1的值“john”、“test”、“hello”-这将永远不会引发重复错误,因为主键将始终递增。由于这是标准PHP SQL查询最常见的格式,您的答案在大多数情况下可能不适用。您的表定义是什么?例如,显示创建表格…由于特定原因,我编辑文章可能重复,请检查。您的表格定义是什么?例如,显示创建表…由于特定原因,我编辑的文章可能重复,请检查。