Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL显示带有子标题的产品的父标题_Sql_Xml - Fatal编程技术网

SQL显示带有子标题的产品的父标题

SQL显示带有子标题的产品的父标题,sql,xml,Sql,Xml,你好 我有一个woocommerce网站,我不使用变体。。。所有产品都很简单。但是对于合作伙伴商店,我需要使用可变产品创建XML 我有未发布的产品是隐藏的自定义帖子状态 对于指定了父产品的定制现场产品,我也有父产品sku 我有一个SQL代码,可以从数据库中提取所有必要的产品以及sku和父sku 我需要修改SQL代码以显示产品变体的父产品的post_标题 我附上我的SQL代码和一些图片 SELECT wp_posts.post_title AS title, wp_pos

你好

我有一个woocommerce网站,我不使用变体。。。所有产品都很简单。但是对于合作伙伴商店,我需要使用可变产品创建XML

我有未发布的产品是隐藏的自定义帖子状态

对于指定了父产品的定制现场产品,我也有父产品sku

我有一个SQL代码,可以从数据库中提取所有必要的产品以及sku和父sku

我需要修改SQL代码以显示产品变体的父产品的post_标题

我附上我的SQL代码和一些图片

    SELECT 
    wp_posts.post_title AS title,
    wp_posts.post_excerpt AS shortdesc,
    wp_posts.post_content AS longdesc,
    wp_postmeta1.meta_value AS sku,
    wp_postmeta6.meta_value AS parent_sku,
    wp_postmeta2.meta_value AS price,
    wp_posts1.guid AS img,
    wp_postmeta5.meta_value AS mall,
    GROUP_CONCAT( wp_terms.name ORDER BY wp_terms.name SEPARATOR ', ' ) AS product_categories
FROM wp_posts
LEFT JOIN wp_postmeta wp_postmeta1
    ON wp_postmeta1.post_id = wp_posts.ID
    AND wp_postmeta1.meta_key = '_sku'
LEFT JOIN wp_postmeta wp_postmeta2
    ON wp_postmeta2.post_id = wp_posts.ID
    AND wp_postmeta2.meta_key = '_regular_price'
LEFT JOIN wp_postmeta wp_postmeta3
    ON wp_postmeta3.post_id = wp_posts.ID
    AND wp_postmeta3.meta_key = '_thumbnail_id'
LEFT JOIN wp_posts wp_posts1
    ON wp_posts1.ID = wp_postmeta3.meta_value
    AND wp_posts1.post_type = 'attachment'
LEFT JOIN wp_postmeta wp_postmeta5
    ON wp_postmeta5.post_id = wp_posts.ID
    AND wp_postmeta5.meta_key = 'mall'
LEFT JOIN wp_postmeta wp_postmeta6
    ON wp_postmeta6.post_id = wp_posts.ID
    AND wp_postmeta6.meta_key = 'parent_sku'


LEFT JOIN wp_term_relationships
    ON wp_term_relationships.object_id = wp_posts.ID
LEFT JOIN wp_term_taxonomy
    ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
    AND wp_term_taxonomy.taxonomy = 'product_cat'
LEFT JOIN wp_terms
    ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_posts.post_type = 'product' AND ( wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'hidden') AND wp_postmeta5.meta_value = 'yes'
GROUP BY wp_posts.ID
ORDER BY sku ASC
我的代码显示这个表

我需要像这样显示一个电子表格


谢谢你的帮助我的第一个方法是这样的。我不能测试它,因为我没有样本数据库

使示例SQL成为其具有父SKU的新查询的子查询 与包含父SKU和所需数据的另一个子查询联接。 主查询按所需顺序选择字段

SELECT baseSQL.title p_title, 
           parentSQL.title AS p_parent_title, -- second field in picture
           baseSQL.shortdesc AS p_shortdesc,
           baseSQL.longdesc AS p_longdesc,
           baseSQL.sku AS p_sku,
           baseSQL.parent_sku AS p_parent_sku,
           baseSQL.price AS p_price,
           baseSQL.img AS p_img,
           baseSQL.mall AS p_mall,
           baseSQL.product_categories AS p_categories
    FROM
      ( SELECT 
          wp_posts.post_title AS title,
          wp_posts.post_excerpt AS shortdesc,
          wp_posts.post_content AS longdesc,
          wp_postmeta1.meta_value AS sku,
          wp_postmeta6.meta_value AS parent_sku,
          wp_postmeta2.meta_value AS price,
          wp_posts1.guid AS img,
          wp_postmeta5.meta_value AS mall,
          GROUP_CONCAT( wp_terms.name ORDER BY wp_terms.name SEPARATOR ', ' ) AS product_categories
        FROM wp_posts
        LEFT JOIN wp_postmeta wp_postmeta1
          ON wp_postmeta1.post_id = wp_posts.ID
          AND wp_postmeta1.meta_key = '_sku'
        LEFT JOIN wp_postmeta wp_postmeta2
          ON wp_postmeta2.post_id = wp_posts.ID
          AND wp_postmeta2.meta_key = '_regular_price'
        LEFT JOIN wp_postmeta wp_postmeta3
          ON wp_postmeta3.post_id = wp_posts.ID
          AND wp_postmeta3.meta_key = '_thumbnail_id'
        LEFT JOIN wp_posts wp_posts1
          ON wp_posts1.ID = wp_postmeta3.meta_value
          AND wp_posts1.post_type = 'attachment'
        LEFT JOIN wp_postmeta wp_postmeta5
          ON wp_postmeta5.post_id = wp_posts.ID
          AND wp_postmeta5.meta_key = 'send'
        LEFT JOIN wp_postmeta wp_postmeta6
          ON wp_postmeta6.post_id = wp_posts.ID
          AND wp_postmeta6.meta_key = 'parent_plu'

        LEFT JOIN wp_term_relationships
          ON wp_term_relationships.object_id = wp_posts.ID
        LEFT JOIN wp_term_taxonomy
          ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
          AND wp_term_taxonomy.taxonomy = 'product_cat'
        LEFT JOIN wp_terms
          ON wp_term_taxonomy.term_id = wp_terms.term_id
        WHERE wp_posts.post_type = 'product' AND ( wp_posts.post_status = 'publish'
        OR wp_posts.post_status = 'hidden') AND wp_postmeta5.meta_value = 'yes'
        GROUP BY wp_posts.ID
        ORDER BY sku ASC
      ) baseSQL

    LEFT JOIN
      (
        SELECT 
          wp_posts.post_title AS title,
          wp_postmeta1.meta_value AS sku
        FROM wp_posts
        LEFT JOIN wp_postmeta wp_postmeta1
          ON wp_postmeta1.post_id = wp_posts.ID
          AND wp_postmeta1.meta_key = '_sku'
      ) parentSQL

    ON baseSQL.parent_sku = parentSQL.sku 
    AND baseSQL.parent_sku > 0
    GROUP BY baseSQL.sku
检查此功能的性能,也许将分组和排序移到外部会有更好的性能

我不建议在原始左连接中的嵌套连接中进行子查询,因为我无法测试它,从现在开始,我无法想象这种交叉连接与postmeta1和postmeta6的反应

我建议实现一些触发器,在wp_posts表中包含sku和parent_sku字段,您可以对表本身执行简单的子查询。 在我了解mySQL之前,mySQL中没有像Oracle中那样的分层查询,但这可能有助于改进您的查询。 这取决于你

很抱歉,如果复制/粘贴不起作用,这只是一种方法


使用最终功能SQL编辑

我的全功能代码

 SELECT baseSQL.title p_title, 
           parentSQL.title AS p_parent_title, -- second field in picture
           baseSQL.shortdesc AS p_shortdesc,
           baseSQL.longdesc AS p_longdesc,
           baseSQL.sku AS p_sku,
           baseSQL.parent_sku AS p_parent_sku,
           baseSQL.price AS p_price,
           baseSQL.img AS p_img,
           baseSQL.mall AS p_mall,
           baseSQL.product_categories AS p_categories
    FROM
      ( SELECT 
          wp_posts.post_title AS title,
          wp_posts.post_excerpt AS shortdesc,
          wp_posts.post_content AS longdesc,
          wp_postmeta1.meta_value AS sku,
          wp_postmeta6.meta_value AS parent_sku,
          wp_postmeta2.meta_value AS price,
          wp_posts1.guid AS img,
          wp_postmeta5.meta_value AS mall,
          GROUP_CONCAT( wp_terms.name ORDER BY wp_terms.name SEPARATOR ', ' ) AS product_categories
        FROM wp_posts
        LEFT JOIN wp_postmeta wp_postmeta1
          ON wp_postmeta1.post_id = wp_posts.ID
          AND wp_postmeta1.meta_key = '_sku'
        LEFT JOIN wp_postmeta wp_postmeta2
          ON wp_postmeta2.post_id = wp_posts.ID
          AND wp_postmeta2.meta_key = '_regular_price'
        LEFT JOIN wp_postmeta wp_postmeta3
          ON wp_postmeta3.post_id = wp_posts.ID
          AND wp_postmeta3.meta_key = '_thumbnail_id'
        LEFT JOIN wp_posts wp_posts1
          ON wp_posts1.ID = wp_postmeta3.meta_value
          AND wp_posts1.post_type = 'attachment'
        LEFT JOIN wp_postmeta wp_postmeta5
          ON wp_postmeta5.post_id = wp_posts.ID
          AND wp_postmeta5.meta_key = 'send'
        LEFT JOIN wp_postmeta wp_postmeta6
          ON wp_postmeta6.post_id = wp_posts.ID
          AND wp_postmeta6.meta_key = 'parent_plu'

        LEFT JOIN wp_term_relationships
          ON wp_term_relationships.object_id = wp_posts.ID
        LEFT JOIN wp_term_taxonomy
          ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
          AND wp_term_taxonomy.taxonomy = 'product_cat'
        LEFT JOIN wp_terms
          ON wp_term_taxonomy.term_id = wp_terms.term_id
        WHERE wp_posts.post_type = 'product' AND ( wp_posts.post_status = 'publish'
        OR wp_posts.post_status = 'hidden') AND wp_postmeta5.meta_value = 'yes'
        GROUP BY wp_posts.ID
        ORDER BY sku ASC
      ) baseSQL

    LEFT JOIN
      (
        SELECT 
          wp_posts.post_title AS title,
          wp_postmeta1.meta_value AS sku
        FROM wp_posts
        LEFT JOIN wp_postmeta wp_postmeta1
          ON wp_postmeta1.post_id = wp_posts.ID
          AND wp_postmeta1.meta_key = '_sku'
      ) parentSQL

    ON baseSQL.parent_sku = parentSQL.sku 
    AND baseSQL.parent_sku > 0

    GROUP BY baseSQL.sku

SQL dos中的字段与图片中的标题名称不对应。顺便说一句,SKU在SQL中是第四个字段,在图片中是第五个字段。我想你想把图片中的第二个字段添加到SQL中,是吗?@Biggum是的,你是对的,显示父项的第二列\u标题不在SQL代码中。。我想把它添加到这里,向我们展示一些示例表数据和预期的结果——都是格式化文本,而不是图像。但是首先看一看。@Biggum对不起,我不懂英语。想要看到没有模糊文本的真实sql结果吗?您好,非常感谢您的帮助。当我输入代码时,出现以下错误。1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用“LEFT JOIN SELECT wp_posts.post_title AS title,wp_postmeta1.meta_va”的正确语法,该语法在第51行添加了一个缺少的FROM to main SQL。语法问题。但是如果没有示例数据库,那么如果存在其他运行问题,就很难尝试。你是SQL的初学者吗?我用SQL做了好几次,但是我忽略了这个错误。这很有效。但从255个产品中,我有44000个产品,这是因为每个父产品都添加了一个子产品标题,我可以通过添加GROUP by baseSQL.sk来加入产品。。。现在我看到255种产品。但我仍然在rainbow parent_post_标题栏中看到了子产品的名称。我很震惊,我不明白你被困在哪里了。我知道您解决了表的笛卡尔运算并恢复了结果的数量。但不获取父产品名称?没有父产品发布的产品在第二列父产品发布标题中有不同的产品标题。对不起,我的英语不好。是的,这个代码正确。再次感谢你的帮助。我遇到了另一个问题。。。我需要从数据库中提取图像,并将它们作为id列表存储在一个单元格中,即200、201、202,在我根据id显示url知道的第二个表中,但如果我在单元格中有更多id,则不起作用。我要求您用最终代码完成我的回答,不要用你的方法撤销我的解决方案…提升你自己有点…顺便说一句,你的问题是,你必须发布列表中的一张图片还是所有图片?按原样检索单元格值并循环记录集循环每次执行中的值似乎是合乎逻辑的