на предположении, что name
поле вы ищете на находится в таблице wp_terms
, есть два основных варианта.
Первый просто ищет объекты с первой категорией, а затем использует другое, чтобы найти те, которые также имеют вторую категорию. Это позволяет использовать одну и ту же таблицу в двух разных объединениях и поэтому использует псевдонимы и избегает ключевого слова using
.
select * from wp_links l
inner join wp_term_relationships r on l.link_id = r.object_id
inner join wp_term_taxonomy t on r.term_taxonomy_id = t.term_taxonomy_id
inner join wp_terms c1 on t.term_id = c1.term_id
inner join wp_terms c2 on t.term_id = c2.term_id
where taxonomy = "link_category"
and c1.name = 'stuff'
and c2.name = 'other_stuff'
Альтернативой является гораздо более масштабируемым более чем просто два любых категорий, но включает в себя подзапрос ...
select
l.*
from
(
select l.id from wp_links l
inner join wp_term_relationships r on l.link_id = r.object_id
inner join wp_term_taxonomy t on r.term_taxonomy_id = t.term_taxonomy_id
inner join wp_terms c on t.term_id = c.term_id
where taxonomy = "link_category"
and c.name IN ('stuff', 'other_stuff')
group by l.id
having count(distinct c.name) = 2
)
subquery
inner join wp_links l ON subquery.id = l.id
внутренний запрос находит все, что имеют одну категорию или другой, но то предложение having позволяет только через те, у которых есть две категории в нашем списке. (Другими словами, оба из них.) [Он также предполагает, что таблица wp_links
как id
колонки использовать в качестве уникального идентификатора.]
Будет ли это всегда '2' категории, или вам нужно обобщать это к категориям 'n'? Кроме того, к какой таблице принадлежит 'name'? Я предполагаю, что он находится в 'wp_terms'? – MatBailie
@Dems Моя особая потребность в категориях «2», хотя я бы приветствовал ответ «n» для образовательных целей. Вы правы, что 'name' находится в' wp_terms' - извинения за упущение. – wwninja