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

31 мар. 2011 г., 18:41:55
Просмотры: 2.36K
Голосов: 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)

Откуда берутся эти 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
4
Комментарии

"Другая платформа"; но вы работаете с базой данных WordPress, верно?

MikeSchinkel MikeSchinkel
31 мар. 2011 г. 19:02:58

@Mike Да, я бы сказал, что это база данных MYSQL. Поскольку я не использую классы абстракции базы данных Wordpress

simple simple
31 мар. 2011 г. 19:07:19

Но вы используете схему базы данных WordPress, правильно?

MikeSchinkel MikeSchinkel
31 мар. 2011 г. 19:20:38

@Mike Да, вы правы, схема базы данных WP

simple simple
2 апр. 2011 г. 01:36:38
Все ответы на вопрос 1
4

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

31 мар. 2011 г. 20:54:14
Комментарии

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

simple simple
2 апр. 2011 г. 01:37:42

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

Rarst Rarst
2 апр. 2011 г. 01:40:58

@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?

simple simple
2 апр. 2011 г. 09:34:57

@simple Этот запрос вообще не для постов, это запрос для произвольных полей. Я не уверен, какое это имеет отношение к делу, как сказано выше - попробуйте вывести фильтр posts_request, если вам нужен запрос, который выполняется для получения постов.

Rarst Rarst
2 апр. 2011 г. 14:04:21