gpt4 book ai didi

php - 根据另一个表中的列表过滤 MySQL 表结果

转载 作者:行者123 更新时间:2023-11-29 11:35:18 24 4
gpt4 key购买 nike

我有一个表,它以 json 对象数组的形式提供所有表结果数据。此结果返回整个“messages”表数据。

目标是让登录用户 $myusername 查看所有结果,除非某个人出现在“blockRequests”表中,其中 $myusername 报告者

我的PHP:

$myusername = $_GET['username']; //the logged in user who is viewing the messages

$rows = array();
$stmt = $conn->query("SELECT * FROM messages ORDER BY datetime DESC");
while($r = $stmt->fetch(PDO::FETCH_ASSOC))
{
$rows[] = $r;
}
print json_encode(array('messageData' => $rows));

我有一个单独的表'blockedRequests',其中列出了阻止用户的请求,其中用户将其用户名报告为'blockedUsr'

我只是尝试返回所有消息,但排除任何可能出现在BlockedRequests 表中的'blockedUsr'

enter image description here

我的 SQL 知识非常基础,我不知道如何连接表并获得所需的结果。

我尝试了什么

$stmt = $conn->query("SELECT messages.*, blockRequests.* FROM messages 
LEFT JOIN blockRequests ON messageBox.user = blockRequests.reportedBy")

这将返回已加入但未过滤的消息列表。任何关于如何连接这些表以获取过滤消息的建议都会很棒。

编辑(我刚刚尝试过的)

SELECT messages.*, blockRequests.* FROM messages
LEFT JOIN blockRequests ON messages.user = 'suser'
WHERE blockRequests.reportedBy IS NULL

这给了我连接表,但不过滤blockedUsrs,我仍然在结果集中看到它们。

最佳答案

也许你可以尝试一下

SELECT messages.*
FROM messages
WHERE messages.userid NOT IN (SELECT blockedusr
FROM blockrequests
WHERE reportedBy = $myusername);

显然您需要弄清楚如何通过您的 orm 将 $myusername 传递给查询。

基本上是这样的:选择消息用户 ID 不在该用户报告的阻止用户列表中的所有消息。

在这种情况下,我们没有使用联接...从您正在寻找的内容来看,我认为没有必要。我只是使用了子选择和“NOT IN”子句。

关于php - 根据另一个表中的列表过滤 MySQL 表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698842/

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