需要帮助来从三个MySQL表中检索数据

问题描述:

我有三个名为“users”,“user_hobbies”和“hobbies”的表。以下是带值的示例表格;
下面是用户fields id, name and age需要帮助来从三个MySQL表中检索数据

╔════╦══════╦═════╗ 
║ ID ║ NAME ║ AGE ║ 
╠════╬══════╬═════╣ 
║ 1 ║ abc ║ 23 ║ 
║ 2 ║ xyz ║ 24 ║ 
║ 3 ║ pqr ║ 21 ║ 
╚════╩══════╩═════╝ 

及以下user_hobbies表的字段ID,USER_ID和hobby_id

╔════╦═════════╦══════════╗ 
║ ID ║ USER_ID ║ HOBBY_ID ║ 
╠════╬═════════╬══════════╣ 
║ 1 ║  1 ║  1 ║ 
║ 2 ║  1 ║  2 ║ 
║ 3 ║  1 ║  3 ║ 
║ 4 ║  2 ║  4 ║ 
║ 5 ║  2 ║  3 ║ 
║ 6 ║  2 ║  5 ║ 
║ 7 ║  3 ║  2 ║ 
║ 8 ║  4 ║  6 ║ 
╚════╩═════════╩══════════╝ 

。下面是爱好表的字段标识和说明

╔════╦═══════════╗ 
║ ID ║ DESC ║ 
╠════╬═══════════╣ 
║ 1 ║ music  ║ 
║ 2 ║ chatting ║ 
║ 3 ║ cricket ║ 
║ 4 ║ badminton ║ 
║ 5 ║ chess  ║ 
║ 6 ║ cooking ║ 
╚════╩═══════════╝ 

。实际的要求是,我需要一个查询检索的姓名,年龄,hobby_id和desc(见下面的例子)

╔══════╦═════╦══════════╦═════════════════════════╗ 
║ NAME ║ AGE ║ HOBBYID ║  DESC    ║ 
╠══════╬═════╬══════════╬═════════════════════════╣ 
║ abc ║ 23 ║ 1,2,3 ║ music,chatting,cricket ║ 
║ pqr ║ 21 ║ 2  ║ chatting    ║ 
║ xyz ║ 24 ║ 4,3,5 ║ badminton,cricket,chess ║ 
╚══════╩═════╩══════════╩═════════════════════════╝ 

您需要先加入的表和使用被称为GROUP_CONCAT()聚合函数。

SELECT a.Name, 
     a.Age, 
     GROUP_CONCAT(c.ID) hobbyIDs, 
     GROUP_CONCAT(c.desc) descList 
FROM users a 
     INNER JOIN user_hobbies b 
      ON a.ID = b.user_ID 
     INNER JOIN hobbies c 
      ON b.hobby_ID = c.ID 
GROUP BY a.Name, a.Age 

为了进一步获得更多的知识有关加入,请访问以下链接:

输出

╔══════╦═════╦══════════╦═════════════════════════╗ 
║ NAME ║ AGE ║ HOBBYIDS ║  DESCLIST   ║ 
╠══════╬═════╬══════════╬═════════════════════════╣ 
║ abc ║ 23 ║ 1,2,3 ║ music,chatting,cricket ║ 
║ pqr ║ 21 ║ 2  ║ chatting    ║ 
║ xyz ║ 24 ║ 4,3,5 ║ badminton,cricket,chess ║ 
╚══════╩═════╩══════════╩═════════════════════════╝ 
+0

欢迎您':D' – 2013-04-25 15:48:13

+0

+1很好的答案。 – Kermit 2013-04-26 02:06:35