我有三张table:
表1-文件:
ID Title
====================
1 doc 1
2 doc 2
3 doc 3
4 doc 4
每个文档可以分配给多个子类别-此关系位于表2中。
表2-匹配文档id和子类别id的文档子类别:
document_id subcategory_id
============================
1 1
1 2
1 5
2 1
2 2
3 1
3 7
4 2
4 3
4 5
表3-子类别-还有一个子类别表,其中包含其id、名称和另一个(更高)级别的类别的更高级别的类别id。
id name higer_level_category_id
============================================
1 To buy 1
2 To give back 1
3 To send 1
4 To buy 2
5 To send 2
6 To throw 2
7 To destroy 2
我们想要得到的是:
doc_id doc_title subcat_id subcat_id upper_1 upper_2
for_upper_cat1 for_upper_cat2
==========================================================================================
1 doc 1 1,2 5 1 2
2 doc 2 1,2 NULL 1 NULL
3 doc 3 1,7 7 1 2
4 doc 4 2,3 5 1 2
我创建了一个这样的查询,但我不知道如何将子类别和上类别分隔成单独的列:
SELECT
documents.id as doc_id,
documents.title as doc_title,
group_concat(DISTINCT doc_subcategory.subcategory_id) as subcat_id,
group_concat(DISTINCT subcategories.higer_level_category_id) as upper
FROM
documents
LEFT JOIN
doc_subcategory
ON
(
documents.id = doc_subcategory.id
)
LEFT JOIN
subcategories
ON
(
doc_subcategory.subcategory_id = subcategories.id
)
GROUP BY documents.id;
我注意到,当我给order by子句另一个参数subcategories.higer\ level\ category\ id时,这会给我一个更好的结果,但这仍然远远不是我想要的。问题在于动态列的创建应该与子类别的数量有关。更高级别的类别id。
1条答案
按热度按时间luaexgnf1#
您的查询中似乎有一些错误(例如。g。没有列
doc_subcategory.id
). 我为你的问题准备了一个小演示。你可以在这里找到它:http://rextester.com/xop97169我将您的查询更新为
这会导致
也许你可以在这把小提琴的基础上说明一些更细微的地方。但是,正如@strawberry已经说过的,数据的“表示”通常应该留给您的嵌入应用程序,可以是javascript(node.js)、python、c#或php。。。。