Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Duda consulta Anidada con

Estas en el tema de Duda consulta Anidada con en el foro de Mysql en Foros del Web. Es Wordpress, en breve: Tengo 2 taxonomy: instituciones y area_tematica Tengo el ID de una institución (id_term) y obtengo todas los ID de los post ...
  #1 (permalink)  
Antiguo 09/07/2012, 08:18
 
Fecha de Ingreso: diciembre-2007
Mensajes: 169
Antigüedad: 16 años, 4 meses
Puntos: 6
Pregunta Duda consulta Anidada con

Es Wordpress, en breve:
  • Tengo 2 taxonomy: instituciones y area_tematica
  • Tengo el ID de una institución (id_term) y obtengo todas los ID de los post asociados a ese term (select anidado)
  • Ahora tengo un conjunto de ID de post, quiero obtener todas los id_term de el taxonomy area_tematica

Mi llamada a la BD:
Si la hago así mi consulta me retorna solo 1 resultado.
Código MySQL:
Ver original
  1.                     t.term_id,
  2.                     t.name
  3.                 FROM
  4.                     $wpdb->term_relationships tr,
  5.                     $wpdb->term_taxonomy tt,
  6.                     $wpdb->terms t
  7.                 WHERE
  8.                     tr.object_id IN (SELECT
  9.                                        group_concat(p.ID)
  10.                                     FROM
  11.                                         $wpdb->term_relationships tr,
  12.                                         $wpdb->term_taxonomy tt,
  13.                                         $wpdb->terms t,  
  14.                                         $wpdb->posts p
  15.                                     WHERE
  16.                                         tr.object_id = p.ID AND
  17.                                         tr.term_taxonomy_id = tt.term_taxonomy_id AND
  18.                                         tt.term_id = t.term_id AND
  19.                                         t.term_id = '$institucion' AND
  20.                                         p.post_status = 'publish'
  21.                                     )
  22.                     AND
  23.                     tr.term_taxonomy_id = tt.term_taxonomy_id AND
  24.                     tt.term_id += t.term_id AND
  25.                     tt.taxonomy = '$taxonomy'

Eso se transforma es esto:

De está manera me retorna bien los resultados
Código MySQL:
Ver original
  1.                     t.term_id,
  2.                     t.name
  3.                 FROM
  4.                     wp_term_relationships tr,
  5.                     wp_term_taxonomy tt,
  6.                     wp_terms t
  7.                 WHERE
  8.                     tr.object_id IN (20,32,,54,76,88,99,61,22)
  9.                     AND
  10.                     tt.taxonomy = 'area_tematica' AND
  11.                     tr.term_taxonomy_id = tt.term_taxonomy_id AND
  12.                     tt.term_id = t.term_id


Y el resultado de eso solo me devuelve una sola fila, o sea [t.term_id, t.name] y debería devolver más ya que tengo más terms asociados.

Aquí la BD de Wordpress, si alguien me puede ayudar por favor.
__________________
Inspiracion

Última edición por albertcito; 09/07/2012 a las 08:33
  #2 (permalink)  
Antiguo 09/07/2012, 08:46
 
Fecha de Ingreso: diciembre-2007
Mensajes: 169
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Duda consulta Anidada con

Así me funciono, pero ya no esta anidad :( quería ver si se podía ser anidado y alguien que sepa mucho me explique!
Código PHP:
$query "
            SELECT 
               group_concat(p.ID) as ID
            FROM 
                $wpdb->term_relationships tr, 
                $wpdb->term_taxonomy tt, 
                $wpdb->terms t,  
                $wpdb->posts p
            WHERE 
                tr.object_id = p.ID AND
                tr.term_taxonomy_id = tt.term_taxonomy_id AND
                tt.term_id = t.term_id AND
                t.term_id = '$institucion' AND
                p.post_status = 'publish'
            "
;
    
$sql $wpdb->get_results($queryOBJECT);
    
$querystr "               
                SELECT 
                    t.term_id,
                    t.name
                FROM 
                    $wpdb->term_relationships tr, 
                    $wpdb->term_taxonomy tt,
                    $wpdb->terms t
                WHERE 
                    tr.object_id IN ("
.$sql[0]->ID.") 
                    AND
                    tr.term_taxonomy_id = tt.term_taxonomy_id AND
                    tt.term_id = t.term_id AND
                    tt.taxonomy = '$taxonomy'
                "

    
//echo  $querystr;
    
return $wpdb->get_results($querystrOBJECT); 
__________________
Inspiracion
  #3 (permalink)  
Antiguo 09/07/2012, 08:54
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda consulta Anidada con

Hola albertcito:

No hay necesidad de poner el GROUP_CONCAT en la anidación, ese es el problema, deja tu consulta anidada así:
Código:
...
 WHERE 
                    tr.object_id IN (SELECT p.ID
......
Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. |    4 | cuatro      |
  9. +------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tablaB;
  13. +------+-------------+
  14. | id   | descripcion |
  15. +------+-------------+
  16. |    2 | dos         |
  17. |    4 | cuatro      |
  18. |    5 | cinco       |
  19. +------+-------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tablaA
  23.     -> WHERE id IN (SELECT GROUP_CONCAT(id) FROM tablaB);
  24. +------+-------------+
  25. | id   | descripcion |
  26. +------+-------------+
  27. |    2 | dos         |
  28. +------+-------------+
  29. 1 row in set (0.00 sec)
  30.  
  31. mysql> SELECT * FROM tablaA
  32.     -> WHERE id IN (SELECT id FROM tablaB);
  33. +------+-------------+
  34. | id   | descripcion |
  35. +------+-------------+
  36. |    2 | dos         |
  37. |    4 | cuatro      |
  38. +------+-------------+
  39. 2 rows in set (0.00 sec)

Saludos
Leo.
  #4 (permalink)  
Antiguo 09/07/2012, 09:03
 
Fecha de Ingreso: diciembre-2007
Mensajes: 169
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Duda consulta Anidada con

Te cuento que probe de todas formas y me daba error:
Cita:
#1242 - Subquery returns more than 1 row mysql
Pero no intente de la manera que colocaste :S Muchas gracias esa es la solución :)
__________________
Inspiracion

Etiquetas: select, wordpress, anidados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.