【问题标题】:SQL Query: Group Concat Children Elements With ParentSQL 查询:将 Concat 子元素与父元素分组
【发布时间】:2014-11-19 22:01:44
【问题描述】:

我正在尝试查询 WordPress 数据库以导出帖子列表及其内容。我一切正常,但不知道如何包含附加图像。我不知道如何在同一张表中将孩子与父母相关联。

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

wp_posts 表结构:

ID   post_parent   guid          post_type
1     0             http://...    attachment
2     1             http://...    attachment
3     1             http://...    attachment
4     1             http://...    attachment

这是我的查询:

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 匹配。

希望我已经发布了足够的信息,如果我应该包含任何其他数据,请告诉我。感谢阅读!

最好的问候, 周杰伦

【问题讨论】:

    标签: mysql sql sql-server wordpress parent-child


    【解决方案1】:

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

    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

    【讨论】:

    • 非常感谢!这帮助我了解如何使用变量。不过,仍在试图弄清楚如何使它与我上面发布的大查询一起工作。
    • 我得到一个 SQLSTATE[21000]:基数违规:1241 操作数应该包含 1 列错误。它似乎不喜欢在子选择中;我把它放在我之前的 SELECT 语句所在的位置,将子选择括号和 AS“图像”放在最后。对不起,我的天真,如果有你推荐的相关参考资料,我很乐意去看看。我是学霸! :)
    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2020-08-26
    • 2018-07-09
    • 2011-04-14
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多