簡體   English   中英

復雜的MySQL查詢,多表-如何編寫此關系查詢?

[英]Complex MySQL Query, Multi Table - How Do I Write This Relational Query?

我在編寫此查詢時遇到問題,這是我無法弄清的奇怪關系。 我想知道是否最好只使用兩個mysql查詢並將結果與​​php合並?...無論如何..所以我們走了。

這是我們正在使用的表:

- media -
id 
userId 
accessKey 
internalName 
type
created 
modified

- reposts - 
id
userId
mediaId
created

- users - 
id
username

基本上,我想做的是獲取與發布它的用戶相關聯的媒體項目的結果集,然后在同一結果集中,ALSO還包含已重新發布的媒體項目的其他行,然后是用於重新發布的媒體項目的其他行,而不是將媒體項目的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合並?

您可以在查詢中使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM