首页 > 解决方案 > PHP wordpress 中的一次查询中的双重 MySQL 查询

问题描述

我正在使用 wordpress 网站和内部自定义 PHP srcipt,它将与 CRON 一起运行以更新帖子。

我怎么看:

  1. 我想查询数据库中的帖子表并获取所有已发布的帖子。
  2. 我需要对表进行一次查询 - 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

后元:

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

标签: phpmysqlwordpress

解决方案


你可以像这样使用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'

推荐阅读