gpt4 book ai didi

PHP PDO MYSQL 复合选择语句

转载 作者:行者123 更新时间:2023-11-28 23:26:17 26 4
gpt4 key购买 nike

Table1
id | username | request
--------|--------------|----------
1 | user 1 | blah blah
2 | user 1 | blah2
3 | user 1 | blah3
4 | user 1 | blah4
5 | user 2 | blah1

Table2
id | username | requestID
--------|--------------|------------
1 | user 2 | 1

“用户 2”的返回结果应该是:

table1.id = 2
table1.id = 3
table1.id = 4

我需要创建一个选择,它将从用户名 <> $用户名的第一个表中选择所有 ID(这很简单)。

我还需要将其与表 2 进行匹配,以确保 $username 尚未具有表 1 中与表 2 中的 RequestID 匹配的所述 ID(这是我不知道该做什么的地方)。

我知道如何进行内部联接,但这似乎比那复杂一点。我是否将两个不同的选择结合在一起?我该怎么做?

现有代码:

$stmt=$db->prepare("SELECT id FROM table1 WHERE username <> :user");
$stmt->bindParam(':user', $username);
$stmt->execute();
$row = $stmt->fetch();

添加到问题

我已经尝试了一个内连接,它只是在第二个 WHERE 子句上返回了一个错误:Unknown column 'table2.username' in 'where clause'.. yet looking the table clearly has a username column.

$stmt=$db->prepare("SELECT table1.id 
FROM table1
INNER JOIN table2
ON table1.id = table2.requestID
WHERE table1.username <> 'user 1'
AND table2.username = 'user 1'");

添加更多内容以使其更清晰

我不相信一个简单的 INNER JOIN 会像我最初所说的那样解决我的问题。我需要先从 table1 中获取结果。然后我需要针对 table2 测试的那些结果,以便仅返回来自 table1 NOT MADE 的当前用户的结果,并且在那些返回的结果中,应该只返回用户没有在 table2 中列出的结果。

所以我猜我将不得不执行两个完全独立的数据库功能。

$stmt=$db->prepare("SELECT id FROM table1 WHERE username <> :user");
$stmt->bindParam(':user', $username);
$stmt->execute();
$row = $stmt->fetch();
$id = $row['id'];

$stmt=$db->prepare("SELECT requestID FROM table1 WHERE username = :user");
$stmt->bindParam(':user', $username);
$stmt->bindParam(':id', $id);
$stmt->execute();
$rid = $stmt->fetch();

if $rid !== $id { //perform function } else {}

我认为有一种方法可以复合 select 语句,这样我就不必执行 2 个不同的调用,但也许我错了。无论哪种方式,我都看不到内部联接将如何实现这一点……但我愿意学习。

还有更多更新试图使这一点更加清晰

table1.id = 1 不应该匹配,因为用户 2 有一个 table2.requestID 匹配 table1.id; table1.id = 5 不应该匹配,因为用户 2 是 table1.id = 5 的列出的用户名

但是应该返回其他 3 列。

最佳答案

你可以使用 IN 来做到这一点

SELECT table1.id
FROM table1
WHERE table1.username <> 'user 2'
and NOT table1.id IN (SELECT requestid FROM table2 WHERE username = 'user 2')

或者使用左连接

SELECT table1.id
FROM table1
LEFT JOIN table2
ON table1.id = table2.requestID
WHERE table1.username <> 'user 2'
and ( table2.username <> 'user 2' OR table2.username IS NULL )

我不知道哪个更好,但他们有相同的结果

关于PHP PDO MYSQL 复合选择语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com