您可以在两个表之间执行“ INSERT SELECT WHERE”吗?

问题描述

所以我一直在尝试创建一个简单的朋友系统。注册时,您将获得随机数字和8个字符的字符。我将此数字保存在用户栏中。我一直在尝试使用“ INSERT SELECT WHERE”语句插入当前会话的用户PHP$SessionUser和朋友的用户名uidUsers,但是出了点问题。这是我尝试过的东西:

$sql = MysqLi_query($conn,"INSERT into friends (uid1,uid2) 
    values($sessionUser,(SELECT  uidUsers FROM users WHERE idFriendCode = $idFriendCode)");

在表friends中,我有两列,uid1(会话的用户/发送者)和uid2(接收者,指定的$idFriendCode名称)。我想将$sessionUser插入到uid1,并将与uidUsers匹配的任何用户名$idFriendCode)插入uid2。这似乎不起作用,我也不知道为什么。我想问题是我不能使用像这样的PHP变量。

我知道我不使用准备好的陈述。我已经尝试实现它,但是我认为这比仅使用基本的MysqLi_query()困难得多。

解决方法

您可以将插入的文字表达为INSERT INTO ... SELECT

INSERT into friends (uid1,uid2) 
SELECT $sessionUser,uidUsers
FROM users
WHERE idFriendCode = $idFriendCode;

请注意,理想情况下,您应该在此处使用准备好的语句,因此上面的内容应类似于:

INSERT into friends (uid1,uid2) 
SELECT ?,uidUsers
FROM users
WHERE idFriendCode = ?;
,

尝试使用新变量进行选择,并在插入查询中使用它

示例:

$select_qr='SELECT  uidUsers FROM users WHERE idFriendCode = $idFriendCode'

$sql = mysqli_query($conn,"INSERT into friends (uid1,uid2) 
    values($sessionUser,$select_qr)");