0

きちんと質問したといいのですが。object_idでグループ化されたオブジェクトのテーブルがあります。それらはキー/値として保存されます。これは簡単だと思いましたが、どこにも解決策が見つかりません。複数のmeta_name値に基づいて完全なオブジェクトを返すために、このテーブルに対してクエリを実行する最も効率的な方法を取得しようとしています。テーブルの構造は次のとおりです。

データベース構造

これが私がこれまでに持っているコードです。これは1つの値をクエリするのに最適です。

SELECT data2.object_id,data2.object, data2.meta_name, data2.value_string, data2.value_text FROM meta_data AS data1
LEFT JOIN meta_data AS data2 ON(data1.object_id = data2.object_id)
data1.object="domain"
AND data1.meta_name = "category"
AND data1.value_string = "programmer"

これにより、次の結果が得られます。これは、単一の分類法(カテゴリプログラマーのドメイン)に最適です。

結果

問題は、カテゴリプログラマー、色が赤、場合によっては他のmeta_name=value_stringsを使用してすべてのドメインをクエリする場合に発生します。PHPから複数のクエリを作成する以外に、これに対する解決策を見つけることはできません(明らかなパフォーマンス上の理由から避けたいと思います)。

オブジェクトはその場で作成され、特定のスキーマ(最初にこの構造を持つポイント)がないため、ハードコーディングしてオブジェクトについて何も想定できないことを指摘する必要があります(オブジェクトにはより多くのメタプロパティがある可能性があります)いつでも管理パネルからそれらに定義されます)。

繰り返しになりますが、私は過去3日間オンラインで検索して解決策を見つけることが完全に不運だったので、この質問を正しくしていることを願っています。

これを手伝ってくれるMySQLプロに事前に感謝します!

4

1 に答える 1

0

このような状況では、通常、複数のクエリを回避するためにすべてのレコードをクエリしてから、データオブジェクトをつなぎ合わせて目的の形式を提供します。次に、これらのオブジェクトで簡単なfind()メソッドを開発して、結果をさらにフィルタリングできます(配列関数を使用するなど)。

正確な実装に興味がある場合は、WordPressを確認することをお勧めします-分類法に注意してください。オープンソースプロジェクトとして、これがどのように行われるかの例について、彼らのコードをレビューすることができます。TaxonomiesAPIMetaAPIを見てください。

于 2012-07-06T14:45:02.270 に答える