我有一个表用于存储关注其他人的人,另一个表用于存储谁拥有某本书。
这就是我能做的:
列出关注 $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/