2016-10-11 79 views
2

我有以下3个表:如何检索多个表并在MySQL中格式化它的一些行?

custom_data表:

+----+----------------------+ 
| id | name     | 
+----+----------------------+ 
| 13 | ACCOUNT NAME   | 
| 14 | ACCOUNT NO   | 
| 15 | ID NUMBER   | 
+----+----------------------+ 

custom_data_values表:

+----------------+-----------------+-----------+ 
| custom_data_id | value   | member_id | 
+----------------+-----------------+-----------+ 
|    13 | Ivy Jane Mosendi|  33 | 
|    14 | 2199030092  |  33 | 
|    15 | 25917781  |  33 | 
+----------------+-----------------+-----------+ 

成员表:

+----+----------------------------+ 
| id | name      | 
+----+----------------------------+ 
| 30 | John Doe     | 
| 31 | Willy Ong     | 
| 32 | James Reid     | 
| 33 | Ivy Jane Mosendi   | 
+----+----------------------------+ 

我想以下结果:

+----+------------------+------------------+-------------+-------------+ 
| id | name    | ACCOUNT NAME  | ACCOUNT NO | ID NUMBER | 
+----+------------------+------------------+-------------+-------------+ 
| 33 | Ivy Jane Mosendi | Ivy Jane Mosendi | 2199030092 | 25917781 | 
+----+------------------+------------------+-------------+-------------+ 

我怎样才能达到这个结果与一个MySQL查询?

+1

您需要自己先做/显示您当前的解决方案。 – reignsly

+0

[MySQL数据透视表](http://stackoverflow.com/questions/7674786/mysql-pivot-table) – Solarflare

+0

请看[ask]和[mcve]。 – Mat

回答

2

我终于破解了它。谢谢所有

SELECT m.name 
     , MAX(CASE WHEN cf.name = 'ACCOUNT NAME' Then cfv.string_value END) As 'ACCOUNT NAME' 
     , MAX(CASE WHEN cf.name = 'ACCOUNT NO' Then cfv.string_value END) As 'ACCOUNT NO' 
     , MAX(CASE WHEN cf.name = 'ID NUMBER' Then cfv.string_value END) As 'ID NUMBER' 
    FROM custom_field_values cfv 
    INNER JOIN custom_fields cf 
     ON cf.id = cfv.field_id 
    INNER JOIN members m 
     ON m.id = cfv.member_id 
    WHERE m.id = 33 
+0

类似家庭作业的问题,但有一个很好的解决方案。请注意,您也可以接受您自己的问题(向回答者展示您的问题已经解决)。 – peterh

+0

我点击选中,但它说“你明天可以接受你自己的答案”。感谢您的支持 –

相关问题