复杂的MySQL查询,多表 - 如何编写此关系查询?

时间:2013-08-25 05:06:46

标签: php mysql sql database

我在编写这个查询时遇到了问题,这是一个奇怪的关系,我无法弄清楚。我想知道是否更好地使用两个mysql查询并将结果与​​php合并?...无论如何..所以我们走了。

以下是我们正在使用的表格:

- 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合并?

1 个答案:

答案 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)