0

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

4

1 回答 1

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)
于 2013-08-25T07:32:06.773 回答