簡體   English   中英

來自多個子查詢的GROUP_CONCAT?

[英]GROUP_CONCAT from multiple subqueries?

我似乎無法為我的一生解決這個問題:x

我有兩張桌子。

  • 1 =標記鏈接
  • 2 =標簽數據

當我查詢配置文件時,每個配置文件在標簽鏈接表中都可以有多個條目。 檢索標簽鏈接后,我想從標簽數據表中獲取標簽文本。

我可以這樣做: 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.

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