0

これは wordpress データベースで、関心のある 2 つのテーブルがあります: posts と postmeta。私がやりたいことは、$term(ユーザーが検索したもの) を取得し、この変数を SQL 検索で使用することです。

一致する場合に検索するテーブルは、meta_value (meta_key が albumYear の場合)、post_content、および post_title です。

問題は、meta_value が他のテーブルとは異なるテーブルにあることですが、そのテーブル postmeta には、posts.ID と同じ ID である post_id があります。これにより、あるメタ値が何らかの投稿に属していることを知ることができます。

次のコードを試してみましたが、ここで人々から助けを得ることができるように、何が必要かを明確にしたことを願っています. これについて本当に助けが必要ですが、グーグルやここで答えが見つかりませんでした。前もって感謝します。

$query_sql = "
    SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta
    ,
     (SELECT *
     FROM $wpdb->posts
     WHERE NOT wpdb->posts.post_status = 'inherit'
     AND (wpdb->posts.post_type = 'page' OR wpdb->posts.post_type = 'post')
     AND (wpdb->posts.post_content LIKE '%".$term."%' OR wpdb->posts.post_name LIKE '%".$term."%' OR $wpdb->postmeta.meta_value LIKE '%".$term."%')
     ORDER BY wpdb->posts.post_title ASC) x
     WHERE $wpdb->postmeta.post_id = $wpdb->posts.ID AND $wpdb->postmeta.meta_key = 'albumYear'
";

$query_result = $wpdb->get_results($query_sql, OBJECT);

SQL 構造のサンプル:

1.wp_posts
1.1 ID, post_type, post_content, post_status, post_name, post_title etc

2.wp_postmeta
2.1 post_id, meta_key, meta_value

そのため、meta_value (meta_key が X の場合)、post_content、post_name などで $term の一致を検索する必要があります。また、Post im 検索を識別し、そのすべてのコンテンツを返す必要があります。

4

1 に答える 1

1

必要なのは、2 つのテーブルを結合するだけです。

申し訳ありませんが、利用可能な WP の atm がないため、確認できませんが、次のようなものが必要です。

$query_sql = "
  SELECT 
    post_id, meta_key, meta_value,
    $wpdb->posts.*
  FROM $wpdb->posts
  LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id
  WHERE NOT wpdb->posts.post_status = 'inherit'
    AND (wpdb->posts.post_type = 'page' OR wpdb->posts.post_type = 'post')
    AND (wpdb->posts.post_content LIKE '%".$term."%' OR 
         wpdb->posts.post_name LIKE '%".$term."%' OR 
         $wpdb->postmeta.meta_value LIKE '%".$term."%')
    AND $wpdb->postmeta.meta_key = 'albumYear'
  ORDER BY wpdb->posts.post_title ASC
";

必要に応じて、チェックとクエリ フィールドのリストを追加します。

于 2012-08-13T00:39:03.823 に答える