Re: [SQL ] 多重欄位值序列或組合的複合搜尋

看板Database作者 (道可道非常道)時間13年前 (2010/09/26 10:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
: 表一:基本資料 : 表二:喜歡表 : 表三:討厭表 : 學生ID是primary key,要如何輸出成如下格式: : : 學生ID 姓名 喜歡 討厭 : ------------------------------------------------------ : 1 王大明 吃飯,打槍,上網 小強,螞蟻,讀書 : 2 菜阿信 看書,電影,漫畫 芝麻,青蛙 : : 推 evernever:你可以看一下 group_concat 怎麼用 09/26 09:07 我初步研究過,如果只要輸出`喜歡`,我知道基本作法是: SELECT `學生ID`,`姓名`,GROUP_CONCAT(`喜歡` SEPERATOR ',') FROM `基本資料` LEFT JOIN `喜歡表` USING (`學生ID`) GROUP BY `學生ID` 以上執行速度極快。 可是要再加上`討厭`就有點棘手了,如果用: SELECT `學生ID`,`姓名`, GROUP_CONCAT(`喜歡` SEPERATOR ',') AS `喜歡`, GROUP_CONCAT(`討厭` SEPERATOR ',') AS `討厭` FROM `基本資料` LEFT JOIN `喜歡表` USING (`學生ID`) LEFT JOIN `討厭表` USING (`學生ID`) GROUP BY `學生ID` 結果會變成: 學生ID 姓名 喜歡 討厭 ------------------------------------------------------------------------------ 1 王大明 吃飯,打槍,上網,吃飯,打槍,上網, 小強,螞蟻,讀書,小強,螞蟻,讀書, 吃飯,打槍,上網 小強,螞蟻,讀書 以上執行速度相當快。 如果用: SELECT `學生ID`,`姓名`,`喜歡`,GROUP_CONCAT(`討厭` SEPERATOR ',') AS '討厭' (SELECT `學生ID`,`姓名`,GROUP_CONCAT(`喜歡` SEPERATOR ',') AS `喜歡` FROM `基本資料` LEFT JOIN `喜歡表` USING (`學生ID`) GROUP BY `學生ID`) AS `t1` LEFT JOIN `討厭表` USING (`學生ID`) GROUP BY `學生ID` 是可以得到我要的結果啦...但速度很慢...有辦法優化嗎? `喜歡表`和`討厭表`都有加上`學生ID`作為index key,以下是 EXPLAIN 結果: id sel_type table type p_keys key k_len ref rows Extra 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 140508 Using filesort 1 PRIMARY 討厭表 ref 學生ID 學生ID 3 t1.學生ID 1 2 DERIVED 基本資料 ALL NULL NULL NULL NULL 149433 Using filesort 2 DERIVED 喜歡表 ref 學生ID 學生ID 3 基.學生ID 2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.123.83 ※ 編輯: danny0838 來自: 58.115.123.83 (09/26 10:56)
文章代碼(AID): #1CdhLb2W (Database)
討論串 (同標題文章)
文章代碼(AID): #1CdhLb2W (Database)