首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找与特定标准相匹配并在特定日期之后创建的元数据。

查找与特定标准相匹配并在特定日期之后创建的元数据。
EN

Code Review用户
提问于 2016-02-01 12:54:10
回答 1查看 50关注 0票数 4

我得到了下面的SQL语句,它在MySQL中运行在WordPress安装上。我正在寻找符合特定标准的元数据,并在某个日期之后创建。

但是,WordPress不存储元数据被添加到帖子中的日期,所以我创建了元数据本身(wpcf-post-like)、它添加的日期(wpcf-post-like- date )和第三块元数据,该元数据是同时创建的,其中包含了前两个由感叹号分隔的ID (wpcf-post-like- date -link)。

然后,我使用下面的SQL语句在特定日期后在由当前作者编写的帖子(例如ID包含在下面的SQL代码中)上获得赞。它工作,但它需要7-8秒左右的运行,这是远远不理想的。是否有一个更有效的版本相同的声明?

代码语言:javascript
运行
复制
SELECT `meta_id` FROM `wp_postmeta` 
WHERE   `post_id` IN (
            SELECT `ID` FROM `wp_posts` WHERE post_author = $user_id
        ) AND
        `meta_value` IN (

        SELECT CONCAT(combined_ids_a.`meta_id`, '!', combined_ids_b.`meta_id`) AS `combined_meta_id` FROM (

            SELECT `meta_id`, 'like_id' AS `meta_type` FROM `wp_postmeta` 
            WHERE `meta_key` LIKE 'wpcf-post-likes'
            AND `meta_value` NOT LIKE '1837'
            AND `meta_id` IN 
            (SELECT SUBSTRING_INDEX(`meta_value`, '!', 1) FROM `wp_postmeta` WHERE `meta_key` LIKE 'wpcf-post-like-date-link' ORDER BY `meta_id` DESC)

            UNION

            SELECT  `meta_id`, 'like_date' AS `meta_type`  FROM `wp_postmeta` 
            WHERE `meta_key` LIKE 'wpcf-post-like-date'
            AND `meta_value` > '01-02-2016 09:20:34'
            AND `meta_id` IN 
            (SELECT SUBSTRING_INDEX(`meta_value`, '!', -1) FROM `wp_postmeta` WHERE `meta_key` LIKE 'wpcf-post-like-date-link' ORDER BY `meta_id` DESC)

        ) AS combined_ids_a JOIN 

        (

            SELECT `meta_id`, 'like_id' AS `meta_type` FROM `wp_postmeta` 
            WHERE `meta_key` LIKE 'wpcf-post-likes'
            AND `meta_value` NOT LIKE '1837'
            AND `meta_id` IN 
            (SELECT SUBSTRING_INDEX(`meta_value`, '!', 1) FROM `wp_postmeta` WHERE `meta_key` LIKE 'wpcf-post-like-date-link' ORDER BY `meta_id` DESC)

            UNION

            SELECT  `meta_id`, 'like_date' AS `meta_type`  FROM `wp_postmeta` 
            WHERE `meta_key` LIKE 'wpcf-post-like-date'
            AND `meta_value` > '01-02-2016 09:20:34'
            AND `meta_id` IN 
            (SELECT SUBSTRING_INDEX(`meta_value`, '!', -1) FROM `wp_postmeta` WHERE `meta_key` LIKE 'wpcf-post-like-date-link' ORDER BY `meta_id` DESC)

        ) AS combined_ids_b    

        );
EN

回答 1

Code Review用户

回答已采纳

发布于 2016-02-01 16:14:17

建议用这个盯着看:

代码语言:javascript
运行
复制
AND `meta_id` IN 
        (SELECT SUBSTRING_INDEX(`meta_value`, '!', 1) 
         FROM `wp_postmeta` 
         WHERE `meta_key` 
         LIKE 'wpcf-post-like-date-link' 
         ORDER BY `meta_id` 
         DESC)

与文本搜索、顺序排序一样,同一wp_postmeta表上的附加子查询是执行冗长查询的来源。将子查询重写为联接

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

https://codereview.stackexchange.com/questions/118522

复制
相关文章

相似问题

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