2013-08-25 49 views
0

我在写这个查询时遇到了问题,这是我找不到的一个奇怪的关系。我想知道是否使用2个mysql查询并将结果与​​php合并会更好?...无论如何..所以在这里,我们走了。复杂的MySQL查询,多表 - 如何编写这种关系查询?

下面是我们使用的表..

- media - 
id 
userId 
accessKey 
internalName 
type 
created 
modified 

- reposts - 
id 
userId 
mediaId 
created 

- users - 
id 
username 

基本上,我想要做的就是一个结果集与谁贴吧用户相关联的媒体项目,然后还要在同一结果集,为已重新发布的媒体项目添加附加行,然后为已重新发布的媒体项目添加关联媒体项目的media.userId以用于用户名关联,请将reposts.userId与用户名关联。

下面是一个粗略的想法来说明,下面这两个示例查询需要工作为1来提供组合结果集。

SELECT media.*, users.username, 
0 AS reposted 
FROM media 
LEFT JOIN users ON users.id = media.userId 

SELECT media.id, media.accessKey, media.internalName, media.type, media.modified, users.username, reposts.userId, reposts.created, 
1 AS reposted 
FROM reposts 
LEFT JOIN media ON media.id = reposts.mediaId 
LEFT JOIN users ON users.id = reposts.userId 

我该怎么做呢?或者我会更好地使用2个查询并将结果与​​PHP合并?

+0

我可以说你想要某种Facebook的墙或叽叽喳喳类型的功能,我的帖子和帖子,我转发或转推也显示? – skv

+0

你钉了它! ;) –

回答

1

您可以在查询中使用UNION,但UNION需要在两个查询相同的列数(如果我没有记错相同的数据类型):

(SELECT media.id, media.accessKey, media.internalName, media.type, media.modified, users.username, users.id, media.created, 
0 AS reposted 
FROM media 
LEFT JOIN users ON users.id = media.userId) 
UNION 
(SELECT media.id, media.accessKey, media.internalName, media.type, media.modified, users.username, reposts.userId, reposts.created, 
1 AS reposted 
FROM reposts 
LEFT JOIN media ON media.id = reposts.mediaId 
LEFT JOIN users ON users.id = reposts.userId) 
+1

正确的列数和数据类型,但也需要在相同的列顺序,除非在联合查询中包含明确的列名称,否则列暗示与第一个查询相同的顺序 – DRapp

+0

正是我需要!我完全忘记了工会。谢谢! –