1
假設一個問題有很多標籤,通過一個稱爲標籤的連接表。按字母順序中的所有其他標籤SQL:從連接中收集右側值
SELECT DISTINCT `questions`.id
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
我想根據特定標籤名訂購的結果,例如「鋼琴」,讓鋼琴是在頂部,那麼:我做了這樣加入。目前我使用這個命令子句:
ORDER BY (tags.name = 'piano') desc, tags.name
這是會完全錯誤的 - 第一個結果我回來,甚至沒有在所有標有「鋼琴」。我認爲我的問題是,我需要以某種方式對標籤名稱進行分組,並對其進行排序測試:我認爲,針對直接tags.name執行此操作不起作用,因爲所生成的連接表的結構(它可以工作如果我只是在標籤表上做一個簡單的選擇),但我無法弄清楚如何解決它。
感激的任何建議,最大
編輯 - 回覆馬塞洛重新COALESCE 非常感謝馬塞洛 - 我從來沒有見過這個。必須更正確地閱讀api。 這確實有幫助,但前提是我也選擇了coalese子句。即,這:
SELECT DISTINCT `questions`.id
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name
仍然給出虛假結果。但是,這個:
SELECT DISTINCT `questions`.id, COALESCE(tags.name,'')
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name
返回正確的結果。我想仍然只是選擇問題ID。無論如何越來越接近...