¿Alguien puede proporcionar un ejemplo de SQL RAW para SELECCIONAR publicaciones por 2 o más etiquetas?

31 mar 2011, 18:41:55
Vistas: 2.36K
Votos: 0

Necesito un SQL RAW, ya que estoy trabajando desde una plataforma diferente con la base de datos de WordPress.

Cuando ejecuto example.com/tag/first+second, WordPress ejecuta una consulta SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)

¿De dónde obtuvo estos IDs de publicación? Solo estoy especulando. Tengo algunas ideas al respecto, pero primero quiero ver si alguien lo sabe.

Aquí está la consulta que he construido para obtener publicaciones por UNA SOLA etiqueta:

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

gracias.

sql
4
Comentarios

"Plataforma diferente"; ¿pero estás trabajando con la base de datos de WordPress?

MikeSchinkel MikeSchinkel
31 mar 2011 19:02:58

@Mike Sí, diría que es una base de datos MYSQL. Como no estoy usando las clases de abstracción de la base de datos de WordPress

simple simple
31 mar 2011 19:07:19

Pero estás usando el esquema de la base de datos de WordPress, ¿verdad?

MikeSchinkel MikeSchinkel
31 mar 2011 19:20:38

@Mike Sí, tienes razón sobre el esquema de la base de datos de WP

simple simple
2 abr 2011 01:36:38
Todas las respuestas a la pregunta 1
4

Parece que estás capturando la consulta incorrecta. Al volcar el SQL para dicha URL (mediante el filtro posts_request) me muestra esto:

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

En cualquier caso, revisa el método WP_Query->get_posts(), que se encarga de convertir las variables de consulta en SQL. Hay mucho código ahí y gran parte fue modificado en la versión 3.1, por lo que me resulta un poco difícil identificar exactamente dónde se manejan múltiples etiquetas.

31 mar 2011 20:54:14
Comentarios

Sí, tienes razón, tengo una consulta ligeramente diferente, pero incluso con la que mencionaste, no puedo usarla para seleccionar múltiples "etiquetas"

simple simple
2 abr 2011 01:37:42

@simple ¿La URL example.com/tag/first+second obtiene lo que necesitas? Solo conecta a posts_request y vuelca la consulta que genera, como hice yo. ¿Necesitas ayuda con eso?

Rarst Rarst
2 abr 2011 01:40:58

@Rast sí obtiene resultados, pero ejecuta una consulta similar a "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)", ¡Pero lo que necesito es obtener esos post_id! También los verifico contra Soundex, así que el caso se vuelve un poco más divertido. ¿Alguna idea sobre cómo volcar todas las consultas que WordPress ejecuta por cada solicitud?

simple simple
2 abr 2011 09:34:57

@simple Esa consulta ni siquiera es una consulta para publicaciones, es una consulta para campos personalizados. No estoy seguro de qué tiene que ver con nada, como se mencionó anteriormente, por favor intenta volcar el filtro posts_request si necesitas la consulta que se ejecuta para recuperar las publicaciones.

Rarst Rarst
2 abr 2011 14:04:21