在之前的問題中,我被告知如果我想爲一個用戶存儲多種語言,那麼最好有一個單獨的表映射語言和用戶在一起。 這是有道理的,因爲它是一個經典的多對多關係,所以這就是我所做的。使用MYSQL打印多個數據的正確方法是什麼?
我現在的問題是我可以寫什麼樣的查詢來連接每個用戶的所有語言名稱,然後將其顯示爲表?
我提出了以下(是正確的嗎?):
CREATE TABLE language (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name char(20) NOT NULL UNIQUE)
CREATE TABLE user (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name char(20) NOT NULL UNIQUE)
CREATE TABLE user_language (
id_user INT REFERENCES user(id),
id_lang INT REFERENCES language(id))
我然後插入3個測試用戶,7種測試語言和插入9對到USER_LANGUAGE表。現在我想用一個MySQL查詢打印每個用戶在用戶名旁邊說的語言的連接列表,我不知道該怎麼做。 例如我想看看
User | Languages
--------|---------------
Bob | English, French
Alex | Spanish, Portuguese
Ivan | Russian, English, German
任何想法?我是否在正確的軌道上?
編輯
我知道的JOIN功能,使打印出清單作爲一組單獨對的是不是我的本意。我特別想連接每個用戶的語言,而無需在腳本中編寫循環(在我的情況下,這將在PHP中)。 我認爲可能有一些方法來編寫子查詢並使用CONCATENATE函數來幫助我...?我離開嗎?
如果事實證明確實是唯一的方法,我可能會接受這個答案。我確信會有一些聰明的方法讓MySQL爲我進行連接,而不必訴諸編寫腳本中的循環。 – twerdster 2011-03-30 01:35:44
因此,在其他人發帖後,別人正確回答了我的問題之後。不過,你的回答讓我接近了,所以我標記爲正確。我正在查找的命令是GROUP_CAT。 http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/ – twerdster 2011-03-30 08:57:15