如何将两个 sql 查询合二为一? [复制]

Posted

技术标签:

【中文标题】如何将两个 sql 查询合二为一? [复制]【英文标题】:how to combine the two sql queries into one? [duplicate] 【发布时间】:2012-09-20 21:42:43 【问题描述】:

可能重复:“INSERT IGNORE” vs “INSERT … ON DUPLICATE KEY UPDATE”

大家好

$sql1="SELECT * FROM `table` WHERE `user` = '$user'";
$res1=mysql_query($sql1);
if(!$res1||mysql_num_rows($res1)<1)
$sql2="INSERT INTO `table` (`user`) VALUES ('$user')";
$res2=mysql_query($sql2);
if(!$res2)echo 'Yes';elseecho 'No';

elseecho 'user already exists!';

可以将两个查询合二为一吗?

【问题讨论】:

$user 来自哪里? user列设置为UNIQUE 如果我设置 UNIQUE 列,来自 TARDIS 的 DOCTOR,值是否自动给出?我需要从 100000 到 9999999 的设置值 如果我有重复值,我需要自动设置新值 $user,如果我将使用忽略,我的行不只插入... php.su/functions/?mysql-affected-rows 【参考方案1】:

使用这个查询。

INSERT INTO USER SELECT * FROM TABLE WHERE user='$user'

table表和用户表中的列数必须相同,它们的类型也一样。

你也可以使用

INSERT into user
SELECT * from table 
WHERE user='$user'
AND 
   NOT EXISTS (SELECT * FROM USER 
              WHERE USER = '$user')

【讨论】:

插入表用户?它是什么? 对不起,只是我的错误。我已经编辑了。【参考方案2】:

如果您将列 user 设置为 UNIQUE,则每个用户最多可以有 ONE 个条目。到ALTER TABLE 并创建专栏UNIQUE

ALTER TABLE `table`
    ADD UNIQUE INDEX `user` (`user`);

然后,像这样的单个查询会很好:

$res = mysql_query("INSERT IGNORE INTO `table`(`user`) VALUES( '".mysql_real_escape_string($user) . "')";
echo ( mysql_affected_rows() == 0 ) ? "No" : "Yes";

mysql_affected_rows().

【讨论】:

如果我有重复值,我需要自动设置新值 $user,如果我将使用忽略,不只插入行...如果我有重复值,我需要自动生成新值 $user。 然后插入表用户,不给自动增量字段任何值,sql会为你做这件事..或者你发布你的表结构@john 问题!我每次都说“是”。我怎么能看到user 这个值已经存在于table 中? @JohnSmith 编辑了回复。包含mysql_affected_rows

以上是关于如何将两个 sql 查询合二为一? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 脚本帮助,将两个查询合二为一

将两个 T-SQL 数据透视查询合二为一

查询列的 SQL 连接问题

如何使用 SQL 查询连接两个表? [复制]

如何将这两个查询组合成一个查询?

将 2 个查询合二为一