基于其中一个查询的结果,是否可以将多个表的MySQL查询组合成一个查询?

基于其中一个查询的结果,是否可以将多个表的MySQL查询组合成一个查询?,mysql,Mysql,当前登录用户的$userid是PHP代码中当前可用的全部内容。我想对mysql表运行一个查询,以返回我自己和由createddate DESC订购的朋友的所有状态更新 MySQL示例数据库表: [状态更新] statusupdateid int(8) ownerid int(8) message varchar(250) createddate datetime [朋友] friendid int(8) requestfrom int(8) requestto int(8) datereq

当前登录用户的
$userid
是PHP代码中当前可用的全部内容。我想对mysql表运行一个查询,以返回我自己和由
createddate DESC
订购的朋友的所有状态更新

MySQL示例数据库表:

[状态更新]

statusupdateid int(8)  
ownerid int(8)
message varchar(250)
createddate datetime
[朋友]

friendid int(8)
requestfrom int(8)
requestto int(8)
daterequested datetime
dateupdated datetime
status varchar(1)
问题:我是否可以执行单个字符串查询,返回每个
statusupdates.userid
statusupdates.message
statusupdates.createddate DESC
排序的
statusupdates.message


或者我必须对
朋友中的
$userid
记录运行一个查询,其中
$userid
位于
朋友.requestfrom
朋友.requestto
中,然后,对其他
朋友.requestfrom
朋友.requestto
(不包括
$userid
)运行另一个查询,然后按
statusupdate.createddate对所有结果进行排序,然后获取想要查看MySQL连接的
statusupdates.message

我认为这可能会像你所追求的那样,但它几乎肯定需要调试

SELECT DISTINCT s.ownerid, s.message 
FROM statusupdates s 
LEFT JOIN friends f ON ($userid = f.requestfrom) 
LEFT JOIN friends f ON ($userid = f.requestto)
ORDER BY s.createddate;

这是未经测试的,但应该有效,或者至少让你朝着正确的方向前进

您可以使用where从子查询中获取
userid
s的列表。该子查询执行2次查询-第一次是从
用户ID
s获取
请求,第二次是从
用户ID
获取
请求。最后,我们添加一个
来包含当前的
用户ID。

此外,我假设您还希望筛选出
status=1
,因为您不希望未确认友谊的人更新

SELECT s.ownerid, s.message 
FROM statusupdates s 
WHERE s.ownerid IN (
                   SELECT f1.requestfrom
                   FROM friends f1
                   WHERE f1.requestto = $userid
                   AND f1.status = 1

                   UNION

                   SELECT f2.requestto
                   FROM friends f2
                   WHERE f2.requestfrom = $userid
                   AND f2.status = 1
                   )
OR s.ownerid = $userid
ORDER BY s.createddate DESC

看看这个sqlFiddle示例-

我搜索并找到了该页面,因此我知道我基本上可以链接两个表中的两列,但我不确定如何使用“friends”表中可能匹配“statusupdates.ownerid”的两列进行链接抱歉,我试图引用statusupdates表和ownerid(但我无意中编写了userid)我将把一些东西固定在一起。:)有一个编辑。抱歉-我不是最伟大的SQL编写者,它可能不会第一次为您工作!必须更改左第二个连接上的f,因为它说f不是唯一的。但我相信它奏效了!我得到了我期望的结果,但仍然想在更复杂的情况下进行测试。非常感谢您的帮助。我已经编辑了我的答案,并提供了一个sqlFiddle示例。这在测试后同样有效。我希望我能把两个答案都标记为正确,因为这两个答案都有效,但只是使用不同的方法。谢谢你抽出时间。非常感谢。