LIMIT
(или должно быть, если нет ошибки) всегда выполняется после SELECT DISTINCT
. Я предполагаю, что ваш запрос НЕ показывает точные дубликаты, он показывает только дубликаты wp_posts
столбцов, которые имеют более 1 связанных строк в таблице wp_term_relationships
, то есть они имеют более одной связанной таксономии.
Я также думаю, что вам нужны только столбцы wp_posts.*
. Попробуйте это, что также избавляет от DISTINCT
:
SELECT p.*
FROM wp_posts AS p
WHERE EXISTS
( SELECT *
FROM wp_term_relationships AS r
WHERE p.ID = r.object_id
AND r.term_taxonomy_id IN
( 64, 65, 66, 67, 68, 69, 70, 71, 72, 73
, 74, 75, 76, 77, 78, 79, 80, 81, 82)
)
AND p.post_status ='publish'
AND p.post_type ='directory_listing'
ORDER BY p.post_title ASC
LIMIT 0 , 2
Если вам также нужны таксономии или другие столбцы из таблицы wp_term_relationships
, вам придется использовать запрос JOIN
и GROUP BY
wp_posts.id
:
SELECT p.*
, GROUP_CONCAT(r.term_taxonomy_id) AS taxonomy_ids
, COUNT(*) AS number_of_taxonomies
FROM wp_posts AS p
INNER JOIN wp_term_relationships AS r
ON p.ID = r.object_id
WHERE p.post_status ='publish'
AND p.post_type ='directory_listing'
AND r.term_taxonomy_id IN
( 64, 65, 66, 67, 68, 69, 70, 71, 72, 73
, 74, 75, 76, 77, 78, 79, 80, 81, 82)
GROUP BY p.ID
ORDER BY p.post_title ASC
LIMIT 0 , 2