我有一个像这样的表field_list:
field_id|obj_id|field_key|field_content
----------------------------------------
1 | 1 | 123 | Title_A
2 | 1 | 234 | IP_A
3 | 1 | 567 | DNS_A
4 | 2 | 123 | Title_B
5 | 2 | 456 | IP_B
6 | 2 | 789 | DNS_B
7 | 3 | 123 | Title_C
8 | 3 | 456 | IP_C
9 | 3 | 789 | DNS_C
我需要的是:
obj_id |123 |456 |789
----------------------------------------
1 |Title_A|IP_A |DNS_A
2 |Title_B|IP_B |DNS_B
3 |Title_C|IP_C |DNS_C
我有几个想法,如何实现这一点(创建新表或视图,使用scirpts等)。不幸的是,我的SQL技能不是很专业,我不知道我是否朝着正确的方向努力。
背景: mySql数据库用于存储有关网页的信息。有一个表'obj'和一个表'field_list'。 'obj_id'是来自obj表的外键。 'field_id'是field_list的主键。
我设法通过连接和分隔得到了我想要的东西,但不是很多列的结果。
如果没有简单的答案,或许多人 - 也许有人可以引导我走向正确的方向。
请原谅我糟糕的英语和语法。这是我的第一个stackoverflow问题 - 我希望你能耐心等待我。如果事情不明确,我明天会修改我的问题。
THX!
答案 0 :(得分:3)
你可以尝试这样的东西,但性能可能不完美......
这个表模型在搜索时非常好,而不是它的表列表示:
SELECT object_id,
MAX( IF( field_key = 123, field_content, NULL) ) AS col_123,
MAX( IF( field_key = 234, field_content, NULL) ) AS col_234,
MAX( IF( field_key = 345, field_content, NULL) ) AS col_345,
MAX( IF( field_key = 456, field_content, NULL) ) AS col_456,
MAX( IF( field_key = 567, field_content, NULL) ) AS col_567
FROM field_list
GROUP BY object_id