【发布时间】:2014-03-17 08:23:49
【问题描述】:
到目前为止,我在组合 4 个表格方面的搜索还没有成功。我有 4 张桌子:
内容
content_id | source_id | content_title | content_date
--------------------------------------------------------
1 | 1 | The factory | 189982398300
2 | 2 | Cold and cloudy | 189982398299
3 | 2 | Green tea | 189982398298
来源
source_id | source_name
-------------------
1 | BBC
2 | Reuters
设置
setting_id | setting_name
-------------------------------
1 | bbc_iplayer_string
2 | reuters_video_id
3 | reuters_category
content_join_settings
content_id | setting_id | setting_data
------------------------------------------
1 | 1 | Js88sdhjsd0gDS09
2 | 2 | video_8AJK3ADJD8
2 | 3 | weather
3 | 2 | video_K7KD8N2ND9
3 | 3 | food and drinks
因此,您可能已经注意到,每条内容记录都有自己的源链接,并根据源提供额外的设置。 BBC 的帖子有 bbc_iplayer_string,路透社的帖子有 reuters_video_id 和 reuters_category。当然这只是一个例子。
我希望将结果合并,并使用 setting_name 作为列名。我不知道如何解释,所以我会展示它:
content_id | source_name | content_title | content_date | bbc_iplayer_string | reuters_video_id | reuters_category
--------------------------------------------------------------------------------------------------------
1 | BBC | The factory | 189982398300 | Js88sdhjsd0gDS09 | NULL | NULL
2 | Reuters | Cold and cloudy | 189982398299 | NULL | video_8AJK3ADJD8 | weather
3 | Reuters | Green tea | 189982398298 | NULL | video_K7KD8N2ND9 | food and drinks
我对复杂的 MySQL 查询不是很熟练。我不知道从哪里开始寻找,更不用说搜索什么了。我从这个查询开始,但我不知道如何继续。我可能还没有接近。
SELECT
*
FROM
content,
sources,
settings,
content_join_settings
WHERE
content.content_id = content_join_settings.content_id AND
settings.setting_id = content_join_settings.setting_id AND
sources.source_id = content.source_id
GROUP BY
content.content_id
ORDER BY
content.content_date
DESC
【问题讨论】:
-
你尝试过内部连接了吗?
-
为什么要分组?大多数数据库会在 group by 子句上为此抛出错误……MySQL 不会返回错误,而是会做错事。 Group by 用于聚合,通常不适用于 select *。您还在使用旧的连接语法...您反对使用内部连接 tablea a on...语法吗?
-
@raiyan - 他正在做一个内部连接,只是旧语法。
-
你只有三个设置吗?或者还有更多?
-
@bob 您正在寻找“透视”数据...尝试搜索一个透视答案(如果您仍然需要,我可以在今晚找到它)。 Group by 将清理 MySQL 的结果,但实际上只是将信息错误地组合在一起。