【问题标题】:Wordpress custom SQL to fecth three posts with given meta valuesWordpress 自定义 SQL 以获取三个具有给定元值的帖子
【发布时间】:2013-02-18 09:49:46
【问题描述】:

我有一堆带有元键footer_element_meta_alignment 的自定义帖子类型页脚元素。现在,我正在尝试获取三个最新的帖子,meta_values123。所以,每个值都写一篇文章。

如何使用单个 SQL 查询实现这一目标?

这是我目前的 SQL 查询:

"SELECT wposts.*, meta1.meta_value
FROM $wpdb->posts wposts, $wpdb->postmeta meta1
WHERE 1=1
AND wposts.post_type = 'footer_element'
AND wposts.post_status = 'publish'
AND wposts.ID = meta1.post_id
AND meta1.meta_key = 'footer_element_meta_alignment'
AND (meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3)
ORDER BY meta1.meta_value ASC";

然而,这会获取所有具有给定元值的元素,而不仅仅是最新的。

回答
回答了我自己的问题。

【问题讨论】:

    标签: mysql sql wordpress greatest-n-per-group


    【解决方案1】:

    已修复(我希望如此)。

     SELECT wposts.* FROM $wpdb->posts wposts WHERE
     wposts.post_type = 'footer_element'
     AND wposts.post_status = 'publish'
     AND wposts.ID IN 
     (SELECT max(meta1.post_id) FROM $wpdb->postmeta meta1
     WHERE meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3
     GROUP BY meta1.meta_value)
    

    【讨论】:

    • 这给了我一个 SQL 错误,如果我删除 as q 它不会,但它也不会找到任何帖子
    • @micadelli 哦,对了,不需要别名,因为它不是子查询。它应该是 count()=3 而不是 count()>3。我想我应该更多地关注代码。
    • @micadelli 和SELECT meta1.post_id, count(*) FROM $wpdb->postmeta meta1 WHERE meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3 GROUP BY meta1.post_id 的结果是什么?
    • @micadelli 等一下。我误读了你。我认为它应该搜索具有所有三个标签的帖子,而不是三个帖子,每个帖子都有一个标签。给我一点时间。
    • 还是不行!它只找到两个最旧的元素,一个元值为 2,另一个元值为 3。
    【解决方案2】:

    经过几个小时的努力,我找到了解决方案。

    SQL

    "SELECT *
     FROM (  SELECT p.*, m.meta_value AS meta
             FROM $wpdb->posts AS p
             LEFT JOIN $wpdb->postmeta AS m
             ON p.ID = m.post_id
             WHERE m.meta_key = 'footer_element_meta_alignment'
             AND p.post_status = 'publish'
             ORDER BY m.meta_value ASC, p.post_date DESC) AS h
     GROUP BY meta";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-18
      • 2011-12-09
      • 2013-03-09
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多