Я пытаюсь запросить MySQL, чтобы ЗАКАЗАТЬ, а затем ГРУППА ... это вопрос, который часто возникает здесь, и я нашел ответ, который показался мне подходящим: Получение группы MySQL по запросу для отображения строки в этой группе с наибольшим значением
Однако я обнаружил, что он не упорядочен перед группировкой.
В частности, я пытаюсь использовать пользовательские типы сообщений 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.