Как я могу найти записи, которые содержат несколько идентификаторов категорий (используя структуру Toxi)? - PullRequest
0 голосов
/ 10 апреля 2019

SQL

SELECT *
FROM posts 
LEFT JOIN taxonomy_term_map 
ON (posts.ID = taxonomy_term_map.object_id) 
WHERE taxonomy_term_map.term_id 
IN (98,119)
GROUP BY posts.ID DESC
HAVING COUNT(posts.ID ) >= 2
LIMIT 0,20

ТАБЛИЦЫ И КОЛОННЫ

posts {ID, post_title и т. Д ...}

taxonomy_terms {term_id, term_label, term_slug и т. д.}

post_taxonomy_term_map {map_id, object_id, taxonomy, term_id} (ПРИМЕЧАНИЕ: object_id относится к значению posts.ID)


Myсайт использует таксономическую структуру Toxi для пометки / классификации сообщений.К каждому сообщению может быть прикреплено несколько идентификаторов терминов.

Каждый термин таксономии, связанный с сообщением, получает запись в таблице "post_taxonomy_term_map".

Используемый в настоящее время запрос возвращает совпадающие записи.вверху результатов («GROUP BY posts.ID DESC») вместе с дополнительными записями, которые не полностью соответствуют всем предоставленным условиям.

Я только хочу выбрать записи, которые соответствуют ВСЕМ предоставленным значениям идентификатора термина, все остальное следует игнорировать.Кроме того, я хочу упорядочить записи по posts.rank, но пока не могу этого сделать при упорядочивании записей по GROUP.

Буду признателен за помощь.

1 Ответ

0 голосов
/ 11 апреля 2019

Я думаю, этот запрос получит то, что вам нужно:

select p.* -- get only the columns from posts
from posts p
join post_taxonomy_term_map m on m.object_id = p.id
where m.term_id in (98, 119) -- filter to specific terms
group by p.id
having count(*) = 2 -- filter out incomplete ones
order by p.rank -- order by rank
limit 20 -- get only the first 20 rows
...