每个帖子都有两个帖子元:年和月(自定义)
我需要SQL查询来提取所有
的帖子wp_postmeta.meta_key = year AND wp_postmeta.meta_value = 2013
并且在同一时间另一个meta_key / meta_value对
wp_postmeta.meta_key = month AND wp_postmeta.meta_value BETWEEN 1和12;
SELECT * FROM wp_postmeta
WHERE (meta_key = 'agam_post_options_year' AND meta_value = 2013)
OR (meta_key = 'agam_post_options_month' AND meta_value BETWEEN 0 AND 12 )
GROUP BY meta_value;
这是我尝试的内容以及更多的变体,但它并没有做太多...这特别给了我一个帖子有2013年和12个帖子有1或...到12为月场}
答案 0 :(得分:1)
请将_PUT_YOUR_POST_ID_FIELD_HERE_替换为该表中适当的字段并尝试运行...
SELECT Y.meta_value, M.meta_value FROM wp_postmeta as Y
JOIN wp_postmeta AS M USING (_PUT_YOUR_POST_ID_FIELD_HERE_)
WHERE (Y.meta_key = 'agam_post_options_year' AND Y.meta_value = 2013)
AND (M.meta_key = 'agam_post_options_month' AND M.meta_value BETWEEN 0 AND 12 )
GROUP BY Y.meta_value, M.meta_value;
答案 1 :(得分:0)
好的一切都很好。它取出“重复”的原因是因为我们没有按Y.meta_id分组,而是使用了meta_value
答案 2 :(得分:0)
如果你真的不需要一个纯SQL查询,并且你在WordPress中获得这些帖子以便使用它们,你可以使用meta_query数组作为args的一部分传递给WP_Query类或者get_posts()功能。
$args = array(
'posts_per_page' => -1,
'post_type' => 'your-post-type', // default 'post'
'meta_query' => array(
relation => 'AND', // default 'AND' it might be 'OR'
array(
'key' => 'agam_post_options_year',
'value' => '2013',
'compare'=> '=',
'type' => 'NUMERIC' // see docs for more types
),
array(
'key' => 'agam_post_options_month',
'value' => array( 0, 12 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC' // see docs for more types
)
)
);
$posts = get_posts( $args ); // returns an array of posts objects
//OR
$query = new WP_Query( $args ); // returns a new WP_Query object
希望它有所帮助! :)