[WordPress] Meta_value 列内のオブジェクトを介して解析する方法

スポンサーリンク

質問

のいくつかを望む助ける私の

wp_postmeta

テーブルの

meta_value

列に格納されているオブジェクトを反復処理します。

私が ID 列に格納し、それらを使用したいと思います内側

SELECT

行くし、各 ID に関連付けられているページのタイトルを取得する ID

ここでは、私の SQL:

SELECT p.ID, p.post_title, p.post_status, p.post_type, pm.meta_key,      pm.meta_value
FROM wp_posts p, wp_postmeta pm
WHERE p.ID = pm.post_id
AND pm.meta_key = topic_related_topics
AND pm.meta_value != ''
ORDER BY p.post_title, p.post_type desc

ここに戻されるものの例です:

1313,ADIPIC ACID,draft,post,topic_related_topics,
    a:5: 
    {i:0;s:3:"961";
    i:1;s:4:"1313";
    i:2;s:3:"975";i:

基本的に ID 961 に関連付けられているタイトルを知りたいです。 タイトルは、

wp_posts

テーブルに格納します

答え

データベースで見ている値は PHP で文字列にシリアル化された配列。

i

は「整数」の略で、「文字列」の略

s

s

後数値を示す文字列はどのくらいです。この場合、「961」整数が、それとして格納される文字列の最初の場所で、(最後の 2 を切りようだ) 5 つ要素を持つ配列。

が PHP でそれを行うし、タイトルを取得する 2 番目のクエリを作成する必要がありますので、SQL でデータをアンシリアライズする良い方法ではありません。ワードプレス関数

maybe_unserialize()

を使用して、配列に変換します

global $wpdb;
$sql = "your sql....";
$rows = $wpdb->get_results( $wpdb->prepare( $sql, $your_args ) );
foreach( $rows as $row ){
    // convert to an array
    $ids = maybe_unserialize( $row->meta_value );
    // loop through the array
    foreach( $ids as $id ){
        // fetch the titles
        $sql = "SELECT post_title FROM $wpdb->posts WHERE ID = %d";
        $title = $wpdb->get_var( $wpdb->prepare( $sql, $id ) );
    }
}

のより標準的な方法

get_post_meta()

を使用して、配列を取得する、ワードプレスの内部でシリアル化を処理します。その他の大きな利点は、キャッシュを使用する場合、それは既にこれらの関数に組み込まれているサポートします

最後に 行う 場合それを取得することができる単一の SQL クエリでは、すべてのメタ値の保存に接続可能性が高いいくつかの追加のロジックが必要です。に加えて保存配列として、1 つの値を結合しそれを保存でする独自 meta_key をつかむことができます。単一の値で捜しているものを達成するために postmeta に posts 表を参加し、先決

http://stackoverflow.com/questions/32167859/how-do-i-parse-thru-an-object-in-the-meta-value-column

スポンサーリンク

Leave a Reply