Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/02/2009, 00:50
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Filtrar resultados que están en varias categorías

¡Jurena eres un genio! Ciertamente hubo un pequeñísimo cambio, pero la estructura de tu ejemplo dio en el clavo... Y sin tú probarla. Mis respetos hombre. Gracias mil.

Documentando un poco el asunto, se trata de una base de datos de Wordpress. Subí la parte del SQL de artículos y categorías aquí, a fin de tener una mejor vista:

http://www.cssplain.com/varios/wp27.txt

Como se puede ver no tiene la estructura más simple, pero (dentro de mi opinión pre-amateur) algunas cosas se me han hecho muy versátiles hasta ahora.

- wp_posts controla los artículos.
- wp_terms controla las categorías
- wp_term_taxonomy controla las categorías padre e hijo
- wp_term_relationships relaciona categorías con artículos

Este es el código que finalmente me funcionó:

Código:
SELECT wp_posts.ID, wp_posts.post_title FROM wp_posts 
LEFT JOIN wp_term_relationships ON wp_posts.ID=wp_term_relationships.object_id
LEFT JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id
LEFT JOIN wp_terms ON wp_term_taxonomy.term_id=wp_terms.term_id
WHERE wp_terms.term_id IN (32,17,36)
GROUP BY wp_posts.ID
HAVING COUNT(DISTINCT wp_terms.term_id) > 2
Para la función específica que necesitaba sólo hacía falta 2 joins, pero aproveché y me traje a wp_terms para agarrar el nombre de las categorías, lo cual también estaba pendiente. Así que sin mucho protocolo la metí en el saco.

Ayer mismo lo había logrado a fuerza de puro php, pero ahora todo lo pendiente en php es simplemente definir las variables resultantes (y las previas por supuesto). Te debo una buena caja de birras Jurena.

Susan, gracias también por tu ayuda. Muy amable.

Sorprendente saber cómo trabaja MySQL e ir conociendo formas creativas de utilizar el código.

Saludos.