2013-04-22 2 views
0

На домашней странице веб-сайта мне нужно вернуть последние 3 сообщения в блоге, созданные с помощью Wordpress.Получение сообщений из Wordpress возвращает тот же результат, когда присутствует в нескольких категориях

У меня есть этот код:

SELECT p.post_title, p.post_date, p.post_content, wpr.object_id, dt_blog_terms.name,  dt_blog_terms.slug 
FROM dt_blog_terms 
INNER JOIN dt_blog_term_taxonomy ON dt_blog_terms.term_id = dt_blog_term_taxonomy.term_id 
INNER JOIN dt_blog_term_relationships wpr ON wpr.term_taxonomy_id = dt_blog_term_taxonomy.term_taxonomy_id 
INNER JOIN dt_blog_posts p ON p.ID = wpr.object_id 
WHERE taxonomy = 'category' 
AND p.post_type = 'post' 
AND p.post_status = 'publish' 
AND slug != 'notizie-notifiche' 
ORDER BY `post_date` DESC 
LIMIT 3 

Как вы можете видеть, у меня есть один (Notizie категории в-notifiche), что я хочу, чтобы исключить. Эта строка sql работает, но у меня проблема, когда сообщение имеет более одной категории. В этом случае он возвращается один раз для каждой категории, в то время как я хочу показать его только один раз.

Любая идея? Я думал, что могу использовать DISTINCT, но, похоже, он не работает с этим выражением SELECT.

ответ

1

Я могу вам сказать, что вам нужно сделать, но я не могу изменить запрос, чтобы сделать это. Вы используете термин «категория» в своем вопросе, но в ваших данных нет имени этого имени.

Вам необходимо агрегировать свои данные на нужном уровне, а затем включить предложение having. Следующие group by могут решить вашу проблему:

group by p.id 
having sum(case when slug = 'notizie-notifiche' then 1 else 0 end) = 0 
+0

Проблема решена, спасибо вам большое! – DavidTonarini

Смежные вопросы