Может ли кто-нибудь привести пример RAW SQL для ВЫБОРКИ постов по 2 или более тегам
Мне нужен RAW SQL, так как я работаю с базой данных WordPress с другой платформы.
Когда я выполняю example.com/tag/first+second
, WordPress выполняет запрос SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)
Откуда берутся эти ID постов? Я только предполагаю. У меня есть определенные мысли по этому поводу, но сначала хочу узнать, может кто-то знает.
Вот запрос, который я построил для выборки постов по ОДНОМУ тегу:
SELECT `wp_posts`.`ID`, `wp_posts`.`post_name`, `wp_posts`.`post_title`, `wp_posts`.`post_date`, `wp_posts`.`post_content` , DATEDIFF(CURDATE(),post_date) as days_ago
FROM `wp_posts`
INNER JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy
ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms
ON (wp_term_taxonomy.term_id = wp_terms.term_id)
WHERE 1=1
AND wp_term_taxonomy.taxonomy = 'post_tag'
AND wp_terms.slug SOUNDS LIKE 'Hennessy'
AND wp_terms.slug SOUNDS LIKE 'VS'
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
спасибо.

Кажется, вы получаете неправильный запрос. Дамп SQL для такого URL (через фильтр posts_request
) выдаёт мне следующее:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_relationships AS tt1 ON (wp_posts.ID = tt1.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (93) AND tt1.term_taxonomy_id IN (94) AND wp_posts.ID IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (93,94)
GROUP BY object_id HAVING COUNT(object_id) = 2
) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10
В любом случае, посмотрите метод WP_Query->get_posts()
, который преобразует переменные запроса в SQL. Там очень много кода, и значительная его часть была изменена в версии 3.1, поэтому мне сложно точно указать, где обрабатываются множественные метки.

Да, вы правы, у меня несколько другой запрос, но даже из того, что вы указали, я не могу использовать его для множественного выбора "тегов"

@simple URL вида example.com/tag/first+second
возвращает то, что вам нужно? Просто подключитесь к posts_request
и дампите генерируемый запрос, как это сделал я. Нужна помощь с этим?

@Rast он действительно возвращает данные, но выполняет запрос вида "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)"
, Однако мне нужно получить именно эти post_id! Я также проверяю их через Soundex, так что ситуация становится немного забавнее! Есть мысли о том, как дампить все запросы, которые WordPress выполняет за один Request?
