0

这是一个 wordpress 数据库,我有 2 个感兴趣的表:posts 和 postmeta。我想要做的是获取 $term(searched by users) 并在 SQL 搜索中使用这个变量。

如果匹配,我要搜索的表是 meta_value(如果 meta_key 是专辑年份)、post_content 和 post_title。

问题是 meta_value 与其他表位于不同的表中,但它的表 postmeta 具有 post_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

您所需要的只是两个表的连接。

抱歉,没有可用的 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 回答