我在编写这个查询时遇到了问题,这是一个奇怪的关系,我无法弄清楚。我想知道是否更好地使用两个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合并?
答案 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)