簡體   English   中英

在PHP wordpress中的一個查詢中進行雙MySQL查詢

[英]double MySQL query in one query in PHP wordpress

我正在使用wordpress網站和自定義PHP srcipt,它將與CRON一起運行以更新帖子。

我怎么看:

  1. 我想查詢數據庫中的posts表並獲取所有發布的帖子。
  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

postmeta:

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

你可以像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'

當您使用全局$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型崗位的狀態為publish和使用meta_query在哪里可以找到職位src_link存在。

嘗試這個:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM