这是一个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搜索并返回其所有内容。
答案 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
";
如果需要,请添加检查和查询字段列表。