【发布时间】:2014-02-10 02:17:34
【问题描述】:
我有以下表格:
"crawlresults"
id | url | fk_crawljobs_id
---------------------------------------------
1 | shop*com/notebooks | 1
2 | shop*com/fridges | 1
3 | website*com/lists | 2
"extractions"
id | fk_extractors_id | data | fk_crawlresults_id
---------------------------------------------------------------
1 | 1 | 123.45 | 1
2 | 2 | notebook | 1
3 | 3 | ibm.jpg | 1
4 | 1 | 44.5 | 2
5 | 2 | fridge | 2
6 | 3 | picture.jpg | 3
7 | 4 | hello | 3
8 | 4 | world | 3
9 | 5 | hi | 3
10 | 5 | my | 3
11 | 5 | friend | 3
"extractors"
id | extractorname
----------------------
1 | price
2 | article
3 | imageurl
4 | list_1
5 | list_2
我需要构造一个 select 语句来为提取表中使用的提取器表中的每个提取器获取列。
例子:
url | price | article | imageurl
--------------------------------------------------------
shop*com/notebooks | 123.45 | notebook | ibm.jpg
shop*com/fridges | 44.5 | fridge | NULL
我不知道执行 select 语句时存在多少提取器名称,因此必须动态构建它。
编辑: 我忘了提到我的提取中可能有多个“列表”。在这种情况下,我需要以下结果集。
示例 2:
url | list_1 | imageurl | list_2
--------------------------------------------------------
website*com/lists | hello | picture.jpg | NULL
website*com/lists | world | picture.jpg | NULL
website*com/lists | NULL | picture.jpg | hello
website*com/lists | NULL | picture.jpg | my
website*com/lists | NULL | picture.jpg | friend
谢谢!
【问题讨论】:
-
MySQL 中没有数据透视查询。事实上,这些类型的查询不属于数据库,因为它们的结果本身不是表;枢轴转换属于数据库顶部的应用层。
-
@Tomas,检查我的答案,你所需要的只是一份准备好的陈述和一些爱。不需要把应用层放在这上面:)。
-
@AnthonyAccioly 看起来不像是执行数据透视查询的好方法。我认为更可行的方法是在 Java/PHP/ASP/C#/whatever 中找到一些枢轴转换库(类似于 R 中的
cast函数 - 非常简单的用法),而不是一遍又一遍地调试一些复杂的 SQL :-)跨度> -
@AnthonyAccioly 我认为应用层正是它所属的地方。