SQL:如何在两个不同的表中搜索,合并结果?

时间:2012-08-13 00:01:06

标签: sql database wordpress search

这是一个wordpress数据库,我有两个感兴趣的表:帖子和postmeta。我想要做的是获取$ term(由用户搜索)并在SQL搜索中使用此变量。

如果匹配,我想要搜索的表是meta_value(如果meta_key是albumYear),post_content和post_title。

问题是meta_value与其他表在不同的表中,但是它的表postmeta有post_id,这与posts.ID的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中搜索$ term的匹配项(当meta_key为X时),post_content,post_name等。但我还需要识别Post im搜索并返回其所有内容。

1 个答案:

答案 0 :(得分:1)

你需要的只是两张桌子的连接。

对不起,没有可用的WP,所以无法检查,但应该喜欢这样的东西:

$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
";

如果需要,请添加检查和查询字段列表。