mysql - PDO MySQL 使用 select 插入多行

标签 mysql pdo

我有一个表用于存储关注其他人的人,另一个表用于存储谁拥有某本书。

这就是我能做的:

列出关注 $userid 的用户

$bookid = '000016';
$userid = '0000000000000156';
    try {
        $stmt = $conn->prepare("SELECT FOLLOW.USER_ID FROM FOLLOW WHERE FOLLOW.FOLLOW_ID = ?");
        $stmt -> execute(array($userid));       
        while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
            $output[] = $row;
            $response["success"] = 1;
        }
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
        $response["success"] = 0;
    }

列出拥有 $bookid 的用户

try {
    $stmt = $conn->prepare("SELECT USERS_BOOKS.USERID FROM USERS_BOOKS WHERE USERS_BOOKS.BOOKID = ?");
    $stmt -> execute(array($bookid));       
    while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
        $output2[] = $row;
        $response["success"] = 1;
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
    $response["success"] = 0;
}

现在我想将那些遵循 $userid 且具有 $bookid 的新表插入到新表中。这是我在不同版本中尝试过的:

try {
    $stmt = $conn->prepare("INSERT INTO NOTI_COMPLETE2 (USERID_OWNER, USERID_COMPLETER, BOOKID)
        SELECT FOLLOW.USERID FROM FOLLOW
        LEFT JOIN USERS_BOOKS ON USERS_BOOKS.USERID = FOLLOW.USERID
        WHERE FOLLOW.FOLLOW_ID = ? AND USERS_BOOKS.BOOKID = ?, ?, ?");
        $query_params = array($userid, $bookid, $userid, $bookid);  
    $stmt->execute($query_params); 
    $response["success"] = 1;
    } catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

所以结果应该是这样的

ID, USERID_OWNER, USERID_COMPLETER, BOOKID
01, 000000000001, 0000000000000156, 000016
01, 000000000011, 0000000000000156, 000016
01, 000000000078, 0000000000000156, 000016
01, 000000000105, 0000000000000156, 000016

这意味着该表包含关注 USERID_COMPLETER 并拥有 BOOKID 的 USERID_OWNER。

这会引发错误(我想这无关紧要,因为谁知道如何做到这一点,就会看到问题)。

最佳答案

您错过了VALUES ('','',''),它应该正好有从 SELECT 语句中提取的 3 列,

因为我不确定 USERID_COMPLETER。您必须在此处放置准确的'table-name'.'column-name'

  INSERT INTO NOTI_COMPLETE2 (`USERID_OWNER`, `USERID_COMPLETER`, `BOOKID`)
    VALUES ( SELECT FOLLOW.USERID, FOLLOW.FOLLOW_ID, USERS_BOOKS.BOOKID FROM FOLLOW
            LEFT JOIN USERS_BOOKS ON USERS_BOOKS.USERID = FOLLOW.USERID
            WHERE FOLLOW.FOLLOW_ID = ? AND USERS_BOOKS.BOOKID = ?);

关于mysql - PDO MySQL 使用 select 插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29418363/

相关文章:

php - 从出生日期显示年龄?

php - 使用外键插入 PDO 失败

php - 使用 PDO 省略 bindParam 安全吗?

mysql - 超过 3 个表过度使用 Inner Join

mysql - 有什么方法可以在 SQL Select 语句中使用 JSON 对象的值吗?

mysql - 以下 node.js mySQL 查询存在什么问题?

php - PDO - 如果在 foreach 循环中总是返​​回 else

mysql - 与 friend 的多对多关系

php - 最后插入 ID 未返回

php - 如何使用 2 个 MySQL 查询动态选择有限数量的项目?