サポート » 使い方全般 » IDは重複しませんか?

  • 解決済 notenotennoote

    (@notenotennoote)


    ターム、タクソノミー、記事、固定ページ、ユーザー、などにはIDが付与されますよね。

    このIDは全てまとめてユニークなものでしょうか?

    つまり「記事IDとして1があり、同時にタームIDとしても1がある」などの重複はありえないと考えてよろしいのでしょうか?

    このあたりのID付与のされ方についての説明ページがあればそれも知りたいです。

    宜しくお願い致します。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは

    こちらのページをご確認下さい。

    データベース構造(CODEX)

    いくつかのテーブルに 〜_id というカラムがありますが、それらと wp_posts の ID がいわゆる ID です。
    そのテーブルごとに連番が振られますので、ターム、タクソノミー、記事(固定ページは投稿と同じテーブル)、ユーザー の間で ID は重複します。

    • この返信は2年、 2ヶ月前にmunyaguが編集しました。
    スレッド開始 notenotennoote

    (@notenotennoote)

    ありがとうございます。
    記事と固定ページで連番にならないだけで全部ユニークなのかと思ってしまいました。
    これ全てまとめて連番にするのって、おかしな構造でしょうか?

    これ全てまとめて連番にするのって、おかしな構造でしょうか?

    全てまとめて連番にするメリットがいまいち分からないのですが、どのような意図があるのでしょうか?

    意図はとりあえず置いておくとして、プラグインをざっと探してみましたが見つかりませんでした。自前で実装するにはそれなりの工数(作業量)が掛かると思います。また、今後のメンテナンスを考慮するとおすすめはできません。

    これ全てまとめて連番にするのって、おかしな構造でしょうか?

    意図がちょっと分からないのでお望みの回答か分からないですが、システム全体で全てのオブジェクトの ID がユニーク(重複しない)というのはおかしな設計ではありませんし、実際にそういうシステムは存在すると思います。
    WordPress はそうではありませんが、それもおかしな設計ではありません。

    スレッド開始 notenotennoote

    (@notenotennoote)

    お二方貴重なアドバイスをありがとうございます。意図についてご返答致します。

    意図はタイムラインの検索です。「フォローユーザーによる投稿か、フォロータームを持つ投稿を、WP_Queryで検索してタイムラインページで表示する」という仕組みを考えています。

    たとえば「”Aさん”をフォローし、”ニュース”をフォローしている」という状況であれば、「Aさんのツイート」と「ニュースについてのツイート」がタイムラインに流れるという仕組みです。

    一応ですが、この仕組みは次の方法で実装できました。

    Aさんが「良いニュースがあるよ」とツイートすれば、そのpost_metaに、
    meta_authorというキーで、AさんのuserIDを持たせる。
    meta_termsというキーで、ニュースのtermIDを持たせる。
    ということをして、➀➁についてWP_Querymeta_queryでORを使うという方法です。

    しかしmeta_queryでのORを多用したくないと感じましたので、ならば
    meta_timelineというキーで、AさんのuserIDとニュースのtermIDをごちゃ混ぜに持たせる。
    ということをすれば、ORが不要になるだろうと考えました。

    以上の経緯から、ごちゃ混ぜだから、termIDuserIDはユニークであってほしい。という意図が生まれたわけです。

    SQLが書けないのでこの策になりましたが、やはりユニークなIDにした場合は「>今後のメンテナンス」への不安を強く感じます。
    もし他の案やアドバイス等ございましたら引き続き頂戴してもよろしいでしょうか。

    WP_Queryを2回流す方法(フォローユーザーによる投稿を取得し、フォロータームを持つ投稿を取得し、array_mergeする方法)は考えていませんが…でも上の不安があれば2回流すべきでしょうか。

    どうぞ宜しくお願い致します。

    要するに、自分で post_meta に入れた値を自分で検索するときにユニークになって欲しいということですね?

    それであれば、プリフィックスをつけてユニークな ID を作って post_meta に入れればよいと思います。

    例)
    投稿:post_99
    ターム:term_99

    スレッド開始 notenotennoote

    (@notenotennoote)

    @munyagu
    ありがとうございます!そうします!
    ながながと失礼いたしました。アドバイス感謝申し上げます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「IDは重複しませんか?」には新たに返信することはできません。