首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询: Group Concat子元素与父元素

问SQL查询: Group Concat子元素与父元素
EN

Stack Overflow用户
提问于 2014-11-20 06:01:44
回答 1查看 997关注 0票数 0

我正在尝试查询一个WordPress数据库,以导出帖子及其内容的列表。我有一切工作,但不知道如何包括附加的图像。我不确定如何将同一表中的子项与父项相关联。

父标识符位于名为ID的列中,而子标识符位于名为post_parent的列中。我尝试连接的值在一个名为guid的列中,该列包含图像的完整URL (正是我需要的)。

wp_posts表结构:

代码语言:javascript
复制
ID   post_parent   guid          post_type
1     0             http://...    attachment
2     1             http://...    attachment
3     1             http://...    attachment
4     1             http://...    attachment

下面是我的问题:

代码语言:javascript
复制
SELECT DISTINCT
post_title
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-year' AND wap_postmeta.post_id = wap_posts.ID) AS "Year"
,(SELECT group_concat(wap_terms.name separator ', ') 
FROM wap_terms
INNER JOIN wap_term_taxonomy ON wap_terms.term_id = wap_term_taxonomy.term_id
INNER JOIN wap_term_relationships wpr ON wpr.term_taxonomy_id = wap_term_taxonomy.term_taxonomy_id
WHERE taxonomy= 'car-manufacturer' AND wap_posts.ID = wpr.object_id
) AS "Manufacturer"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-model' AND wap_postmeta.post_id = wap_posts.ID) AS "Model"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-trim' AND wap_postmeta.post_id = wap_posts.ID) AS "Trim"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-vin' AND wap_postmeta.post_id = wap_posts.ID) AS "VIN"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-odometer' AND wap_postmeta.post_id = wap_posts.ID) AS "Odometer"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-price' AND wap_postmeta.post_id = wap_posts.ID) AS "Price"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-extcolor' AND wap_postmeta.post_id = wap_posts.ID) AS "Exterior Color"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-intcolor' AND wap_postmeta.post_id = wap_posts.ID) AS "Interior Color"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-transmission' AND wap_postmeta.post_id = wap_posts.ID) AS "Transmission"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-engine' AND wap_postmeta.post_id = wap_posts.ID) AS "Engine"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-fuel' AND wap_postmeta.post_id = wap_posts.ID) AS "Fuel Type"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-drivetrain' AND wap_postmeta.post_id = wap_posts.ID) AS "Drivetrain"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-doors' AND wap_postmeta.post_id = wap_posts.ID) AS "car-doors"
,(SELECT meta_value FROM wap_postmeta WHERE wap_postmeta.meta_key = 'car-stockno' AND wap_postmeta.post_id = wap_posts.ID) AS "Stock #"
,(SELECT group_concat(wap_terms.name separator ', ') 
FROM wap_terms
INNER JOIN wap_term_taxonomy ON wap_terms.term_id = wap_term_taxonomy.term_id
INNER JOIN wap_term_relationships wpr ON wpr.term_taxonomy_id = wap_term_taxonomy.term_taxonomy_id
WHERE taxonomy= 'car-feature' AND wap_posts.ID = wpr.object_id
) AS "Features"
,(SELECT group_concat(wap_terms.name separator ', ') 
FROM wap_terms
INNER JOIN wap_term_taxonomy ON wap_terms.term_id = wap_term_taxonomy.term_id
INNER JOIN wap_term_relationships wpr ON wpr.term_taxonomy_id = wap_term_taxonomy.term_taxonomy_id
WHERE taxonomy= 'car-body-type' AND wap_posts.ID = wpr.object_id
) AS "Body Type"

-- MY PROBLEM STARTS HERE
,(SELECT group_concat(wap_posts.guid separator ', ') 
FROM wap_posts
WHERE wap_posts.post_type = 'attachment' AND wap_posts.post_parent = wap_posts.ID
) AS "Images"
-- MY PROBLEM ENDS HERE

FROM wap_posts
WHERE post_type = 'vehicle' AND post_status = 'publish'
ORDER BY
post_title

我意识到这会返回NULL,因为附件的post_parent永远不会与它自己的ID匹配,我只是不知道如何告诉查询将post_parent值与父ID而不是它自己的ID匹配。

希望我已经发布了足够的信息,让我知道是否有任何其他数据我应该包括。感谢您的阅读!

致以最好的问候,杰

EN

回答 1

Stack Overflow用户

发布于 2014-11-20 06:40:27

您可以对同一个表执行left join操作,以产生所需的结果(假设并非每个帖子都有附件)

代码语言:javascript
复制
select     p.Id,group_concat(c.guid separator ', ') guids 
from wap_posts p
left join wap_posts c on (c.post_parent = p.id)

http://sqlfiddle.com/#!2/f7522/1/0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27027881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档