[英]GROUP_CONCAT from multiple subqueries?
我似乎無法為我的一生解決這個問題:x
我有兩張桌子。
當我查詢配置文件時,每個配置文件在標簽鏈接表中都可以有多個條目。 檢索標簽鏈接后,我想從標簽數據表中獲取標簽文本。
我可以這樣做: SELECT * FROM platform.tagWords WHERE tagId IN (SELECT tagId FROM platform.user sProfilesTags WHERE userId = 1001)
但是它會遍歷每個標簽(大約50,000個),然后檢查是否已將其分配給用戶,因此這並不是一個解決方案,因為每個查詢需要5到8秒的時間。
有辦法扭轉這種情況嗎?
任何提示或建議將不勝感激。
提前致謝!
*更新
因此,我嘗試通過連接為它添加一個刺,但是我也被卡在了那里:P
SELECT
GROUP_CONCAT(tagWords.tagWord SEPARATOR ', ') AS tags,
usersProfiles.*
FROM platform.users u
INNER JOIN platform.usersProfilesTags ON usersProfilesTags.userId = u.userId
INNER JOIN platform.usersProfiles ON usersProfiles.userId = u.userId
INNER JOIN platform.tagWords ON tagWords.tagId = usersProfilesTags.tagId
WHERE u.userName = 'mattstest'
您的第一個查詢看起來不錯。 如果需要5到8秒,則可能是在usersProfilesTags(userId)
上缺少索引。
與兩個單獨的查詢相比,在一個查詢中嘗試執行此操作更為困難,並且可能更慢:一個查詢獲取配置文件,另一個查詢獲取標簽。 通常,當您運行多個簡單查詢而不是一個大型復雜查詢時,MySQL效果最佳。 子查詢是一個相對較新的功能,通常性能較差。
另請注意,對於GROUP_CONCAT()
查詢,您缺少GROUP BY
。 您將需要在GROUP BY
列表中列出userProfiles
中的每一列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.