【问题标题】:Insert into“Table1” if a condition is met in “Table” 2 SQL如果在“表”中满足条件,则插入到“表1” 2 SQL
【发布时间】:2012-10-27 23:28:09
【问题描述】:

我发布了一个与此类似的问题是关于删除,这个是关于插入。

你好,

我正在使用 SQL 数据库在 PHP 中制作一个小型消息传递应用程序,但遇到了一个小问题。我会尽可能地解释这个,所以这里......

我有一个名为“用户”的表,如下所示:

ID | Username | Password | Email 
-------------------------------------------
1  | Account1 | Pass 1   | email1@mail.com
2  | Account2 | Pass 2   | email2@mail.com

然后我有另一个叫做“朋友”如下:

UserID | FriendID
------------------
   1   |     2    

所以我需要的是一个查询,如果在“用户”表中满足某个条件,它将向“朋友”表中插入数据

例子:

INSERT INTO 'friends' VALUES('$UserID', '$FriendID') IF (users.Password = $Password WHERE users.ID = $UserID)

我希望这是一个足够好的解释,但我发现这很难解释。

感谢您的帮助:)

【问题讨论】:

    标签: php sql insert conditional-statements


    【解决方案1】:

    这应该可以

    INSERT INTO friends (userID, friendID)
    SELECT $userID, $friendID
    FROM users
    WHERE (users.password = $password) and (users.id = $userid)
    

    如果 where 子句匹配,您将插入许多行,因为存在匹配,并且由于您选择的是硬编码值而不是字段,因此您只需将这些值插入到朋友表中。

    【讨论】:

    • 我可能会在结尾添加 LIMIT 1。与 users 表匹配可能只返回一行,但我自己不会做出这样的假设。
    【解决方案2】:

    试试:

     INSERT INTO friends VALUES('$UserID', '$FriendID') where UserID in (Select ID from Users where users.Password = '$passoword' and users.ID = '$UserID')
    

    【讨论】:

    • 错误是什么?你能显示你查询的代码行吗?
    • 它在 PostgreSQL 上不起作用,并出现错误:“WHERE”或附近的语法错误
    • INSERT 不接受 WHERE 关键字,此代码将不起作用。
    【解决方案3】:

    您需要将条件逻辑放在您的应用程序中,而不是在 SQL 中。您的应用程序代码本身应负责确定是否应执行 INSERT。

    【讨论】:

    • 也许建议然后如何使用数据库事务。这不会回答问题或解决在尝试将此类逻辑移入应用程序代码时常见的竞争条件。
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 2011-03-19
    • 2019-03-01
    • 2013-10-26
    • 1970-01-01
    • 2023-04-05
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多