嵌套这两个SQL查询没有运气

问题描述 投票:0回答:1

我必须使用SQL从WordPress表中获取一些数据,但我无法将这两个查询嵌套在一起。预先感谢!

查询1:此查询获取按语言过滤的wp_post的所有数据(WPML插件)。返回类似wp_posts表的内容

SELECT * 
FROM wp_posts 
JOIN wp_icl_translations t ON wp_posts.ID = t.element_id 
  AND t.element_type = CONCAT('post_', wp_posts.post_type)  
WHERE wp_posts.post_type = 'post' 
AND wp_posts.post_status = 'publish' 
AND ( ( t.language_code = 'en' AND wp_posts.post_type = 'post' ) )

查询2:此查询获取wp_posts表的标题,邮编名称,日期,内容和特色图像URL。

SELECT title, post_name, date, content, CONCAT(LEFT(image, LENGTH(image) - LOCATE('.', REVERSE(image))),'-150x150.',SUBSTRING_INDEX(image, '.', -1)) AS image
        FROM (
            SELECT    
                p.post_title AS title, 
                p.post_status AS 'status', 
                p.post_date AS date,
                p.post_content AS content,
                p.post_name AS post_name,
                (SELECT `guid` 
                    FROM wp_posts 
                    WHERE id = m.meta_value) 
                    AS image
            FROM wp_posts p, wp_postmeta m
            WHERE p.post_type = 'post'
            AND p.post_status = 'publish'
            AND p.id = m.post_id
            AND m.meta_key = '_thumbnail_id'
            ORDER BY date DESC
            LIMIT 5
        )TT

最后工作!我将工作查询留在这里,以防万一有人觉得有用!

SELECT title, post_name, date, content, CONCAT(LEFT(image, LENGTH(image) - LOCATE('.', REVERSE(image))),'-150x150.',SUBSTRING_INDEX(image, '.', -1)) AS image
        FROM (
            SELECT    
                p.post_title AS title, 
                p.post_status AS 'status', 
                p.post_date AS date,
                p.post_content AS content,
                p.post_name AS post_name,
                (SELECT `guid` 
                    FROM wp_posts 
                    WHERE id = m.meta_value) 
                    AS image
            FROM (
                SELECT * 
                FROM wp_posts 
                    JOIN wp_icl_translations t ON wp_posts.ID = t.element_id 
                    AND t.element_type = CONCAT('post_', wp_posts.post_type)  
                WHERE wp_posts.post_type = 'post' 
                    AND wp_posts.post_status = 'publish' 
                    AND ( ( t.language_code = 'en' AND wp_posts.post_type = 'post' ) )
            ) p, wp_postmeta m
            WHERE p.post_type = 'post'
                AND p.post_status = 'publish'
                AND p.id = m.post_id
                AND m.meta_key = '_thumbnail_id'
            ORDER BY date DESC
            LIMIT 4
        )TT
sql wordpress nested wpml
1个回答
0
投票

一种方法是获取您感兴趣的所有后置id值,然后将其传递给WHERE子句中的过滤器。类似于:

WHERE p.ID IN (
    SELECT wp_posts.ID 
    FROM wp_posts 
    JOIN wp_icl_translations t ON wp_posts.ID = t.element_id 
      AND t.element_type = CONCAT('post_', wp_posts.post_type)  
    WHERE wp_posts.post_type = 'post' 
    AND wp_posts.post_status = 'publish' 
    AND ( ( t.language_code = 'en' AND wp_posts.post_type = 'post' ) ))
    ORDER BY date DESC
    LIMIT 4
)

这样,您将从外部查询中返回所有数据,但仅返回子查询中的帖子ids。这是否符合您的需求?

此外,您还应该为JOIN中的联接指定一个FROM wp_posts p, wp_postmeta m条件,否则将获得交叉联接。

© www.soinside.com 2019 - 2024. All rights reserved.