サポート » 使い方全般 » Advance Custom Field ハッシュの中の値をSQLで特定したい

  • 解決済 sola

    (@konuma)


    WP_Query で取得された複数の記事から、PHPで特定の値を見て記事を絞り込む処理をしております。

    ただ、SQLのみ (WP_Query など)で記事を絞り込む場合と、上記のようにそうじゃない場合とでは、
    記事件数が増えた際にパフォーマンスに大きな影響が出るだろうと考えております。

    出来れば SQL のみ (WP_Query など) で記事を絞り込みたいのですが、
    何か良い方法はありませんでしょうか?

    現在絞り込みに用いたい値に、Advance Custom Field ユーザーリレーションで格納したユーザー情報があり、
    それが配列のためハッシュ化されています。
    SQL の LIKE で特定も考えましたが、ユーザー ID は文字列としては簡単に被るため、現状特定が難しいと考えております。

    よろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    配列をDBに保存される場合に用いられるのは、シリアライズという方法ですね。配列やオブジェクトなどを文字列として表現できるようにするものです。

    現状の構成で一番簡単にするなら、meta_query を使って、LIKE 検索にする方法でしょう。
    value は、ユーザーのIDではなく、シリアライズされた一部を指定して下さい。
    例えば、ID12 のユーザーでは、シリアライズされたデータだと以下のようになっているはずです。

    s:2:"12";

    この中で、s がデータ形式が文字列であることを示すもの(データとしては数値ですが、内部的な扱いが文字列となっているためです。)
    コロンに続く 2 が 桁数、ユーザーのIDをダブルクォートで括って、最後にセミコロンとなります。
    この形式を作り出して、LIKE 検索させることで絞り込みが可能なはずです。

    とは、いってもLIKE 検索でインデックスが使えないため、SQLとしては遅くなります。

    よりパフォーマンスを望むのであれば、ユーザーの情報と、カスタムタクソノミーを同期させ、データの持ち方と絞り込みは、カスタムタクソノミーとする方がパフォーマンスとしては上がるはずです。

    トピック投稿者 sola

    (@konuma)

    jim912 さん

    初めまして。回答頂きありがとうございます。
    良くサイト拝見しております。

    > 配列をDBに保存される場合に用いられるのは、シリアライズという方法ですね。
    すいません…ハッシュは完全な誤用でした。

    > value は、ユーザーのIDではなく、シリアライズされた一部を指定して下さい。

    シリアライズ化されたデータに関する知識が無かったのですが、そのような規則性があったのですね。
    大変参考になります。

    教えて頂いた方法を元に、LIKE 検索してみたいと思います。
    (PHPで処理するよりは圧倒的にましなはず…)

    ありがとうございました!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「Advance Custom Field ハッシュの中の値をSQLで特定したい」には新たに返信することはできません。