2016-06-07 5 views
1

Нужно получить последние 5 пользователей, которые размещены в определенном Пользовательский тип сообщения (CTP). Поскольку я, похоже, не могу найти функцию WordPress для этого, я пытаюсь написать собственный запрос.SQL: пользователи Wordpress, заказанные по дате их последнего сообщения (CPT)

До сих пор я получил это, чтобы получить последние пять и количество сообщений (только для my_custom_type), но он пока не работает.
Вот мой запрос:

SELECT *, count(ID) 
FROM wp_posts 
WHERE post_type = 'my_custom_type' 
GROUP BY post_author 
ORDER BY post_author DESC LIMIT 5 

Я хотел бы, чтобы пропустить админа (post_author = 1).

Как я могу это достичь?

Спасибо.

ответ

1

Вам нужно лучше заказать по ID чем post_date или post_author за исключением администратора post_author>1:

SELECT * 
FROM `wp_posts` 
WHERE `post_author` != 1 
AND `post_status` = 'publish' 
AND `post_type` = 'my_custom_type' 
GROUP BY `post_author` 
ORDER BY `ID` DESC, `post_author` ASC LIMIT 5 

Update:

Вы получите Теперь последний список 5 авторов отсортированы по восходящей дате (ASC 'ID'), которые имеют «опубликованные» сообщения (пользовательский тип post = 'my_custom_type'), исключая Admin (идентификатор пользователя = 1). И в конце общее количество сообщений для каждого автора.

Вот запрос:

select t1.*, t2.author_count 
from `wp_posts` t1 
inner join (
    select max(`ID`) as `ID`, `post_author`, count(1) as author_count 
    from `wp_posts` 
    where `post_author` != '1' 
    and `post_status` = 'publish' 
    and `post_type` = 'my_custom_type' 
    group by `post_author` 
) t2 on t1.`ID` = t2.`ID` and t1.`post_author` = t2.`post_author` 
order by t1.`ID` desc limit 5 

author_count является генерируемый столбец, который подсчитывает общее 'published' сообщения с 'post_type' = 'my_custom_type' для каждого выбранного автора.

Основано на this answer.

+0

Спасибо за ответ, я думаю, что это должно быть 'ORDER BY 'post_date'', правильно? чтобы заказать его к дате их последнего сообщения. Это * вид * работает, когда не используется с 'GROUP BY 'post_author''. если используется с 'GROUP BY 'post_author'', он испортил заказ. Но если 'GROUP BY 'post_author'' не используется, и пользователь случайно выложил дважды в последнее время, он также появится дважды в результатах списка. Пожалуйста помоги! – karlosuccess

+0

работает как шарм, если я не использую 'GROUP BY' и' COUNT (ID) '. Но потом, как я уже упоминал, если пользователь дважды выложил сообщение дважды, он также появится дважды в результатах списка. Кроме того, я хотел бы получить общее количество сообщений пользователя, если это возможно (с помощью COUNT() или аналогичного). Спасибо за вашу помощь – karlosuccess

+0

Мне нужно, чтобы список из 5 пользователей был заказан по последним сообщениям CTP. Это работает без 'GROUP BY 'post_author''. Но если мы не будем использовать его, если пользователь дважды выложил сообщение дважды, он также появится дважды в результатах списка. Кроме того, я хотел бы получить общее количество сообщений пользователя, если это возможно (с помощью COUNT() или аналогичного). – karlosuccess