iT邦幫忙

0

請教關於mysql的group by用法

相寫一個多音字的出題系統用在教學上

(一)資料表pingyin_word的內容
| word | word_pingyin | words | bank_id |

| 勝 | (一)ㄕㄥˋ | 聊勝一籌 | 1 |
| 勝 | (一)ㄕㄥˋ | 勝券在握 | 1 |
| 勝 | (一)ㄕㄥˋ | 名勝美景 | 1 |
| 勝 | (二)ㄕㄥ | 悲不自勝 | 1 |
| 勝 | (二)ㄕㄥ | 不勝枚舉 | 1 |
| 勝 | (二)ㄕㄥ | 喜不自勝 | 1 |

(二)目標:
找出相同bank_id(就會找出相同的word)後,依據不同的注音(word_pingyin欄位),列出對應的詞語(words欄位),如在前端列出:
勝(一)ㄕㄥˋ:
聊勝一籌、勝券在握、名勝美景
勝(二)ㄕㄥ:
悲不自勝、不勝枚舉、喜不自勝
(三)寫法:目前我用直覺式的寫法:
https://ithelp.ithome.com.tw/upload/images/20190430/201053129nOEccHLKV.jpg

請問各位高手前輩,有没有更好的寫法呢?

小魚 iT邦高手 1 級 ‧ 2019-04-30 16:07:51 檢舉
所以原本寫的可以用嗎?
zzhsu20 iT邦新手 5 級 ‧ 2019-04-30 21:01:05 檢舉
可以用,但感覺寫得有點髒,向各位高手請教有沒有更優雅或更有效率的寫法?

1 個回答

0
rogeryao
iT邦研究生 2 級 ‧ 2019-04-30 23:06:37
最佳解答

A. pingyin_word table 建議加入一個欄位 word_pingyin_order : 注音第幾聲 (排序用)
B. word_pingyin 欄位不寫入 (一),(二) <= 猜測是注音第幾聲
C. pingyin_bank table 內有個 pingyin_word 欄位 ,有點奇怪;暫不考慮此 table;

CREATE TABLE pingyin_word(word varchar(20), word_pingyin varchar(20),
                          word_pingyin_order varchar(20),
                          words varchar(20),bank_id varchar(20));
SELECT CONCAT(word,
CASE WHEN word_pingyin_order='1' THEN '(一)'
     WHEN word_pingyin_order='2' THEN '(二)'
     WHEN word_pingyin_order='3' THEN '(三)'
     WHEN word_pingyin_order='4' THEN '(四)'
     ELSE '*' END,
word_pingyin) AS wordcombineA,
GROUP_CONCAT(words) AS wordcombineB
FROM pingyin_word 
WHERE 1=1
AND bank_id='1'
GROUP BY word,word_pingyin,word_pingyin_order
ORDER BY word,word_pingyin,word_pingyin_order,words

https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=bc92874400e7f38d6ab31a395433ce0a

我要發表回答

立即登入回答