微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL Group By显示最新结果

我正在尝试查询MySQL到ORDER然后GROUP …这是一个很多问题,我找到了一个似乎与我相关的答案:Getting a MySQL group by query to display the row in that group with the highest value

但是我发现在进行分组之前它仍然没有订购.

具体来说,我要做的是使用wordpress自定义帖子类型按名称为“日期”的元数据字段进行分组,按发布日期排序.

这是我的查询

SELECT 
    `ID`, `date`, `post_date`, `date_rank`
FROM (
        SELECT
            `Post`.`ID`,
            `Post`.`post_date`,
            `PostData`.`Meta_value` AS `date`,
            CASE
                WHEN @data_date = `PostData`.`Meta_value` THEN @rowum := @rownum + 1
                ELSE @rownum := 1
            END AS date_rank,
            @data_date := `PostData`.`Meta_value`
        FROM
            `".$this->wpdb->posts."` AS `Post`
        JOIN 
            `".$this->wpdb->postMeta."` AS `PostData`
            ON `Post`.`ID` = `PostData`.`post_id` AND `PostData`.`Meta_key` = 'date'
        JOIN (SELECT @rownum := 0, @data_date := '') AS `vars`
        WHERE 
            `Post`.`post_type` = 'my_post_type'
            AND
            `Post`.`post_status` = 'publish'
        ORDER BY `Post`.`post_date` DESC
    ) AS `x`
WHERE date_rank = 1
ORDER BY `date` ASC

所需的结果是每个“日期”的帖子(这是一个元字段),根据post_date显示此“日期”的最新帖子.

解决方法:

SELECT  *
FROM    (
        SELECT  disTINCT Meta_value
        FROM    postdata pd
        WHERE   pd.Meta_key = 'date'
        ) pd
JOIN    post p
ON      p.id = 
        (
        SELECT  post_id
        FROM    postdata pdi
        JOIN    post pi
        ON      pi.id = pdi.post_id
        WHERE   pdi.Meta_key = 'date'
                AND pdi.Meta_value = pd.Meta_value
        ORDER BY
                pi.post_date DESC, pi.id DESC
        LIMIT 1
        )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐