SQL查询同一个表中的多个值和多个键

时间:2014-11-11 09:03:29

标签: php mysql wordpress

每个帖子都有两个帖子元:年和月(自定义)

我需要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为月场}

3 个答案:

答案 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

希望它有所帮助! :)