simple
  • 0
Новичок

Кто-нибудь может привести пример RAW SQL для ВЫБОРА постов по 2 или более тегам

  • 0

Мне нужен 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)

Откуда это взяло идентификаторы сообщений? Я только предполагаю. У меня есть определенные мысли по этому поводу, но сначала хочу узнать, знает ли кто-нибудь.

Вот запрос, который я построил при получении сообщений по тегу SINGLE:

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

Благодарю.

Share
  1. «Другая платформа»; вы работаете с базой данных WordPress?

    • 0
  2. Вы, кажется, ловите неправильный запрос. Сброс 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, поэтому мне немного сложно определить, где обрабатываются несколько тегов.

    • 0

Оставить ответ

You must login to add an answer.