PHP wordpress中的一次查询中的双MySQL查询

PHP wordpress中的一次查询中的双MySQL查询,php,mysql,wordpress,Php,Mysql,Wordpress,我正在使用一个wordpress网站和一个定制的PHP srcipt,它将与CRON一起运行以更新帖子 我的看法: 我想查询数据库中的posts表并获取所有发布的posts 我需要再对表进行一次查询——PosteTa——以从我的自定义字段中获取值(我需要解析一个链接) 我是如何做到的: $pages = $wpdb->get_results( " SELECT post_title, id FROM $wpdb->posts WHERE post_status = 'publis

我正在使用一个wordpress网站和一个定制的PHP srcipt,它将与CRON一起运行以更新帖子

我的看法:

  • 我想查询数据库中的posts表并获取所有发布的posts
  • 我需要再对表进行一次查询——PosteTa——以从我的自定义字段中获取值(我需要解析一个链接)
  • 我是如何做到的:

    $pages = $wpdb->get_results( 
    "
    SELECT post_title, id 
    FROM $wpdb->posts
    WHERE post_status = 'publish' 
    AND post_type = 'post'
    "
    );
    
    if( $pages ) {
    foreach ( $pages as $page ) {
        echo $page->post_title . " - ";
        echo $page->id . "<br>";
    }
    }
    
    SELECT post_title, id, meta_value
    FROM $wpdb->posts as post
    INNER JOIN $wpdb->postmeta as meta ON post.id=meta.post_id
    WHERE post.post_status = 'publish' 
    AND post.post_type = 'post'
    AND meta.meta_key='src_link'
    
    meta_id | post_id | meta_key | meta_value
    ---------------------------------------------
    1       | 2       | src_link | here_is_my_link
    ---------------------------------------------
    2       | 1       | empty    | not_my_link
    
    问题是当我添加这一行时-

    AND meta.meta_key='src_link'
    
    它什么也没找到。如果我删除这一行。它找到了我所需要的所有东西,但是使用了dupclicates(我只需要Meta_key='src_link'的行)

    各表:

    帖子

    -------------------
    id | post_title
    ------------------
    1  | new title here
    ------------------
    2  | again a title here
    
    邮差:

    $pages = $wpdb->get_results( 
    "
    SELECT post_title, id 
    FROM $wpdb->posts
    WHERE post_status = 'publish' 
    AND post_type = 'post'
    "
    );
    
    if( $pages ) {
    foreach ( $pages as $page ) {
        echo $page->post_title . " - ";
        echo $page->id . "<br>";
    }
    }
    
    SELECT post_title, id, meta_value
    FROM $wpdb->posts as post
    INNER JOIN $wpdb->postmeta as meta ON post.id=meta.post_id
    WHERE post.post_status = 'publish' 
    AND post.post_type = 'post'
    AND meta.meta_key='src_link'
    
    meta_id | post_id | meta_key | meta_value
    ---------------------------------------------
    1       | 2       | src_link | here_is_my_link
    ---------------------------------------------
    2       | 1       | empty    | not_my_link
    

    您可以像这样使用内部联接

    SELECT post_title, id, meta_key 
    FROM $wpdb->posts as post
    INNER JOIN $wpdb->postmeta as meta ON post.id=meta.post_id
    WHERE post_status = 'publish' and meta.meta_key='src_link'
    AND post_type = 'post'
    

    当您使用全局
    $wpdb
    时,我们可以假设您的PHP在WP框架内。因此,您不需要自定义SQL查询-您可以使用标准:

    $args=array(
    “post_type”=>“post”,
    “发布状态”=>“发布”,
    “每页帖子数”=>-1,
    “元查询”=>数组(
    排列(
    'key'=>'src_link',
    “比较”=>“存在”,
    ),
    ),
    );
    $postsQuery=get_posts($args);
    foreach($postsQuery作为$myPost){
    //我们使用$myPost而不是$post,因为后者是循环中使用的全局变量
    回显“”。打印($myPost,true)。“”;
    更新发布元数据($myPost->ID,‘更新链接’,$myCustomValue);
    }
    
    在这里,我们将获取所有状态为“发布”的
    post
    类型的帖子,并使用
    meta\u查询查找存在
    src\u链接的帖子。

    尝试以下操作:


    感谢您的快速回答,但此代码-添加了5个重复项,但未找到src链接。请使用示例数据更新问题,以便我可以根据您的预期输出帮助您。请尝试我的更新答案不要忘记获取字段
    post_title,id,meta_key
    我在回答中添加了两个表的模式和示例数据。添加了e样本数据它也找不到任何东西;(谢谢,但我复制粘贴了此代码,它没有任何错误。)posts@mrdeath4该代码确实有效-我在少数几个安装上使用了几个不同的键对其进行了测试,它在所有情况下都会返回POST。因此,我假设您搜索的
    meta_键最有可能不存在。请检查您的数据库值并确保您搜索的内容确实存在(任何
    post
    -使用
    src\u链接的
    meta\u键键入post
    )。