当前登录用户的$userid
是PHP代码中当前可用的全部内容。我想对mysql表运行一个查询,以便为我自己和createddate DESC
订购的朋友返回所有状态更新。
MySQL示例数据库表:
[的StatusUpdates]
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
?
或者我是否必须针对friends
或$userid
中friends.requestfrom
所在的每个friends.requestto
记录运行查询,然后为替换{{运行另一个查询1}}或friends.requestfrom
(不包含friends.requestto
的那个),然后按$userid
对所有结果进行排序,然后获取statusupdate.createddate
?
答案 0 :(得分:1)
你想看看MySQL连接。
我认为这可能会像你追求的那样,但几乎肯定需要调试!
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;
答案 1 :(得分:1)
这是未经测试的,但应该起作用或至少让你朝着正确的方向前进。
您可以使用IN()
从子查询中获取userid
的列表。该子查询对2个查询执行UNION
- 第1个获取requestfrom
userid
,第2个获取requestto
userids
。最后,我们添加OR
以包含当前userid.
另外,我认为您还想过滤掉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示例 - http://sqlfiddle.com/#!2/85ea0/3