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_key
或src_link
的post
类型的帖子)。【参考方案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自定义短代码,用于显示wp_usermeta表中的一段用户元数据。依赖Ultimate Member插件