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

Posted

技术标签:

【中文标题】PHP wordpress 中的一次查询中的双重 MySQL 查询【英文标题】:double MySQL query in one query in PHP wordpress 【发布时间】:2018-11-19 08:47:49 【问题描述】:

我正在使用一个 wordpress 网站和一个自定义 php 脚本,它将与 CRON 一起运行以更新帖子。

我是怎么看的:

    我想查询数据库中的posts表并获取所有已发布的帖子。 我需要对表进行一次查询 - postmeta - 从我的自定义字段中获取值(我需要解析一个链接)

我是如何做到的:

$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>";


所以问题是:问题出在 mysql 查询上。我需要这个响应:array[0] -> ID(来自帖子)、post_title(来自帖子)、meta_value(来自 postmeta,其中 meta_key = 'src_link')。我怎样才能得到这个回复?

我试过了 - 但 id 不起作用:

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'

问题是当我添加这一行时 -

AND meta.meta_key='src_link'

它什么也没找到。如果我删除这一行。它找到了我需要的所有内容,但有重复项(我只需要 Meta_key = 'src_link' 的行。

表格:

帖子

-------------------
id | post_title
------------------
1  | new title here
------------------
2  | again a title here

postmeta:

meta_id | post_id | meta_key | meta_value
---------------------------------------------
1       | 2       | src_link | here_is_my_link
---------------------------------------------
2       | 1       | empty    | not_my_link

【问题讨论】:

请添加两个表的架构和示例数据。 添加示例数据 【参考方案1】:

您可以使用 INNER JOIN 喜欢

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'

【讨论】:

感谢您的快速响应,但此代码 - 添加了 5 个重复项,但未找到源链接 请用您的示例数据更新问题,以便我可以根据您的预期输出为您提供帮助。 试试我更新的答案不要忘记填写字段post_title, id, meta_key 我在回答中做了【参考方案2】:

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

$args = array(
    'post_type'         => 'post',
    'post_status'       => 'publish',
    'posts_per_page'    => -1,

    'meta_query'        => array(
        array(
            'key'     => 'src_link',
            'compare' => 'EXISTS',
        ),
    ),
);

$postsQuery = get_posts($args);

foreach ($postsQuery as $myPost) 

    //  We're using $myPost rather than $post as the latter is a global var used in The Loop

    echo '<pre>' . print_r($myPost, true) . '</pre>';

    update_post_meta($myPost->ID, 'updated_link', $myCustomValue);

在这里,我们正在获取所有post-type 状态为publish 的帖子,并使用meta_query 查找存在src_link 的帖子。

【讨论】:

谢谢你,但我复制粘贴了这段代码,它没有找到任何帖子 @mrdeath4 该代码确实有效-我在少数安装中使用几个不同的键对其进行了测试,并且它在所有情况下都会返回帖子。因此,我假设您正在搜索的 meta_key 很可能不存在。检查您的数据库值并确保您要搜索的内容确实存在(任何带有meta_keysrc_linkpost 类型的帖子)。【参考方案3】:

试试这个:

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

【讨论】:

它也什么也没找到 ;(

以上是关于PHP wordpress 中的一次查询中的双重 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

php WordPress中的SQL查询

PHP Wordpress中的简单自定义查询

php 一个WordPress自定义短代码,用于显示wp_usermeta表中的一段用户元数据。依赖Ultimate Member插件

Oracle 的一次 MyBatis 查询中的两个删除?

如何提高 SQL Server 查询的性能以选择具有值的行不在子查询中的一次计数

PHP 中的 MySQL 查询不再有效