[英]UNION on 2 tables returns one almost empty result every time
我有一個叫做Galleries的東西,將媒體組合在一起。 該媒體可以是照片或視頻。 我將照片存儲在一個表中,將視頻存儲在另一個表中,所以我使用UNION查詢來查找屬於圖庫的照片和視頻。
我的問題似乎是我的結果包含其中一個表的空對象(無ID),換句話說,如果該表中沒有結果,它將始終為被查詢的表之一返回無用的結果。
一,查詢:
SELECT * from (
SELECT g.id AS gallery_id, 'photo' AS type, p.id AS id, p.filename, p.caption, null AS title, null AS service, null AS embed, null AS width, null AS height, p.display_order FROM galleries g
LEFT OUTER JOIN photos AS p ON p.gallery_id = g.id
WHERE g.id = {$this->id}
UNION
SELECT g.id AS gallery_id, 'video' AS type, v.id AS id, null AS filename, null AS caption, v.title, v.service, v.embed, v.width, v.height, v.display_order FROM galleries g
LEFT OUTER JOIN videos AS v ON v.gallery_id = g.id
WHERE g.id = {$this->id}
) AS u ORDER BY display_order;
我正在添加type
列,以便可以確定返回哪種結果。 我已經清空了表之間不常見的結果。
就像我說的那樣,它可以工作,但並不完全符合預期。 如果我的畫廊只包含照片,我仍然會得到(幾乎)空的視頻結果。 結果示例:
[] => Galleries Object
(
[id] =>
[name] =>
[slug] =>
[gallery_id] => 32
[type] => video
[filename] =>
[caption] =>
[title] =>
[service] =>
[embed] =>
[width] =>
[height] =>
[display_order] =>
)
[39] => Galleries Object
(
[id] => 39
[name] =>
[slug] =>
[gallery_id] => 32
[type] => photo
[filename] => 39-studio-blue-pacific.jpg
[caption] =>
[title] =>
[service] =>
[embed] =>
[width] =>
[height] =>
[display_order] => 1
)
標記為[type]=>video
的第一個結果為空,我稱之為它,因為它沒有視頻ID,標題,嵌入代碼等。它僅包含gallery_id
和type
。
這是迄今為止我提出的最復雜的查詢,並且我肯定有一些遺漏之處。 如果圖庫僅包含視頻或僅包含照片,我希望結果能反映出來。
作為黑客,我可以在回顯某些內容之前檢查這些結果時是否查看ID
,但我知道可以改進查詢。 救命?
之所以返回這些結果,是因為您在表上使用了外部聯接。 嘗試以下方法:
SELECT * from (
SELECT g.id AS gallery_id, 'photo' AS type, p.id AS id, p.filename, p.caption, null AS title, null AS service, null AS embed, null AS width, null AS height, p.display_order FROM galleries g
JOIN photos AS p ON p.gallery_id = g.id
WHERE g.id = {$this->id}
UNION
SELECT g.id AS gallery_id, 'video' AS type, v.id AS id, null AS filename, null AS caption, v.title, v.service, v.embed, v.width, v.height, v.display_order FROM galleries g
JOIN videos AS v ON v.gallery_id = g.id
WHERE g.id = {$this->id}
) AS u ORDER BY display_order;
同樣,聽起來您從閱讀我撰寫的有關SQL的文章中可能會受益匪淺,以幫助您更好地理解這些概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.