[英]How to write a specific MySQL query to perform a relational division/ intersect? Id est, what query do I write?
[英]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.