elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  ¿Cómo hacer esta consulta?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo hacer esta consulta?  (Leído 9,232 veces)
KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
¿Cómo hacer esta consulta?
« en: 9 Mayo 2012, 12:33 pm »

Hola, tengo la siguiente tabla con el nombre wp_term_relationships:

object_id   term_taxonomy_id
    1        7
    1        8
    2        8
    3        5

He hecho la siguiente consulta,

Código
  1. SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = '7' AND term_taxonomy_id = '8'

Lo que me interesa es que me devuelva los valores que cumplen las dos condiciones, pero supongo que la consulta no se puede hacer de esta forma, ya que no me devuelve ningún registro.

¿Cómo puedo hacerla de forma correcta, de manera que me devuelva el object_id = 1?

Gracias de antemano.


En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.641


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: ¿Cómo hacer esta consulta?
« Respuesta #1 en: 9 Mayo 2012, 12:56 pm »

Código
  1. SELECT object_id
  2. FROM wp_term_relationships
  3. WHERE term_taxonomy_id IN ('7', '8')


En línea

KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #2 en: 9 Mayo 2012, 13:02 pm »

Perfecto! Muchísimas gracias  ;-)
En línea

KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #3 en: 10 Mayo 2012, 12:51 pm »

Vaya, ahora que lo he probado he encontrado una pega.

Si no me equivoco, esta consulta devuelve los object_id que en el campo term_taxonomy_id tienen el valor 7 OR 8. ¿Hay alguna forma de hacer que me devuelva los que tienen el valor 7 AND 8?

Código
  1. SELECT object_id
  2. FROM wp_term_relationships
  3. WHERE term_taxonomy_id IN ('7', '8')

Gracias.
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #4 en: 10 Mayo 2012, 13:45 pm »

Buenas.


Si no me equivoco, esta consulta devuelve los object_id que en el campo term_taxonomy_id tienen el valor 7 OR 8. ¿Hay alguna forma de hacer que me devuelva los que tienen el valor 7 AND 8?

Código
  1. SELECT object_id
  2. FROM wp_term_relationships
  3. WHERE term_taxonomy_id IN ('7', '8')


No tiene sentido lo que planteas. Ten en cuenta que el 'AND' es excluyente para la consulta que montas, por eso si lo utilizas, no hay resultados. En el 'WHERE' sólo utilizas un campo, y éste no puede tener 2 valores diferentes para un mismo registro.

El resultado que buscas, es el obtenido con la consulta que te ha indicado @el-brujo (ya sea utilizando 'IN', 'OR')

Saludos.
En línea

- Nice to see you again -
KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #5 en: 10 Mayo 2012, 13:56 pm »

object_id   term_taxonomy_id
    1        7
    1        8
    2        8
    3        5

El caso es que teniendo esta tabla que he planteado al principio, si hago la consulta

Código
  1. SELECT DISTINCT object_id
  2. FROM wp_term_relationships
  3. WHERE term_taxonomy_id IN ('7', '8')

...me devuelve 1 y 2. En esto estamos de acuerdo. Pero mi pregunta es:

¿Cómo puedo hacerlo para que solamente me devuelva 1?
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #6 en: 10 Mayo 2012, 14:18 pm »

Buenas.

Es que igual estás planteando mal, el cómo enfocar la consulta. ¿quieres saber qué 'term_taxonomy_id' tienen como 'object_id'=1? ¿Podrías explicar un poco, el contexto en el que se mueve esta consulta? Te lo digo ya que tal y cómo lo planteas, la consulta se podría montar así (aunque habría más posibilidades):

Código
  1. SELECT DISTINCT object_id
  2. FROM wp_term_relationships
  3. WHERE term_taxonomy_id IN ('7', '8') AND object_id=1

, pero es que no le veo mucho sentido a esto.

Saludos.
En línea

- Nice to see you again -
KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #7 en: 10 Mayo 2012, 15:33 pm »

Es que lo que quiero hacer es un poco rebuscado, porque estoy intentando integrar un programa hecho en PHP al Wordpress, aprovechando las funciones y la estructura de la base de datos de este. Entonces, lo que he tenido que hacer es apañarme con las Etiquetas para que el cliente pueda asignar un Peso, Estatura y Edad a una página (cada Peso, Edad y Estatura pueden tener más de un valor).

Total, que lo que tengo es una tabla en la que el object_id es el identificador de la página y, el term_texonomy_id la Etiqueta que tiene asociada. Por ejemplo:

object_id       term_taxonomy_id
----------       ----------------------
   1                    7  
   1                    8  
   1                    9  
   2                    8  
   3                    5  
   3                    10
 etc...

Teniendo en cuenta la tabla:

term_taxonomy_id    name
---------------------    --------
   7                            3 Kg
   8                            2 años
   9                            4 Kg
   5                            1 Kg
  10                           0.72m

Cada object_id puede tener varios valores de Kg, Edad y Estatura.

Por esta razón me interesa que me devuelva el object_id=1 cuando desde el formulario que uso para filtrar los resultados seleccione 3 Kg y 2 años.
« Última modificación: 10 Mayo 2012, 15:47 pm por KateLibby » En línea

KateLibby

Desconectado Desconectado

Mensajes: 90



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #8 en: 10 Mayo 2012, 15:46 pm »

He encontrado una forma, aunque no es la solución que buscaba (más bien es una chapuza), pero funciona. Así que la comento por si a alguien le puede servir.

Al final lo que he hecho ha sido usar la misma consulta que propuso el-brujo, en la que me devuelve todos los object_id que tienen alguno de los term_taxonomy_id que le pasamos a través del formulario de filtro. Y para hacer que solo muestre los que coinciden todos los parámetros, he creado una función que me devuelva cierto si ese object_id tiene todos esos parámetros (en lugar de cualquier de ellos, que es lo que me devolvía la consulta SQL).

Entonces queda así:

Código
  1. $parametres = "'".$_GET['edat']."','".$_GET['pes']."','".$_GET['estatura']."'";
  2.  
  3. $sql = "SELECT DISTINCT wp.post_title, wp.ID FROM wp_posts wp, wp_term_relationships wtr WHERE wp.post_parent = '".$tipus[$i]."' AND wp.post_type = 'page' AND wp.ID = wtr.object_id AND wtr.term_taxonomy_id IN ($parametres)";
  4.  
  5. $sql_pagines_tipus = mysql_query($sql);
  6.  
  7. while ( $pagina = mysql_fetch_array($sql_pagines_tipus) ) {
  8.  
  9. if ( mostrarPagina($pagina['ID'], $_GET['edat'], $_GET['pes'], $_GET['estatura']) == true ) { ?>
  10. <li><?php echo $pagina['post_title'] ?><input type="checkbox" name="comparar[]" value="<?php echo $pagina['ID']; ?>"></li>
  11. <?php }
  12. }

Y la función:

Código
  1. function mostrarPagina($pagina_id, $edat, $pes, $estatura)
  2. {
  3.  
  4.    if ( $pes == '' ) {
  5.        $trobat_pes = true;
  6.    }else{
  7.        $trobat_pes = false;
  8.    }
  9.  
  10.    if ( $edat == '' ) {
  11.        $trobat_edat = true;
  12.    }else{
  13.        $trobat_edat = false;
  14.    }
  15.  
  16.    if ( $estatura == '' ) {
  17.        $trobat_estatura = true;
  18.    }else{
  19.        $trobat_estatura = false;
  20.    }    
  21.  
  22.    $sql_tags = mysql_query("SELECT term_taxonomy_id FROM wp_term_relationships WHERE object_id = '$pagina_id'");
  23.  
  24.    while ( $row = mysql_fetch_array($sql_tags) ) {
  25.  
  26.        if ( $row[0] == $edat && $trobat_edat == false ) { $trobat_edat = true;}
  27.        if ( $row[0] == $estatura && $trobat_estatura == false ) { $trobat_estatura = true; }
  28.        if ( $row[0] == $pes && $trobat_pes == false ) { $trobat_pes = true; }
  29.    }
  30.  
  31.  
  32.    if ( $trobat_edat && $trobat_estatura && $trobat_pes) {
  33.        return true;
  34.    }else{
  35.        return false;
  36.    }
  37. }

« Última modificación: 11 Mayo 2012, 11:48 am por KateLibby » En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: ¿Cómo hacer esta consulta?
« Respuesta #9 en: 11 Mayo 2012, 11:38 am »

Buenas.

¿Pero entonces te vale la última consulta montada o no?

Saludos.
En línea

- Nice to see you again -
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como realizar esta consulta en oracle??
Bases de Datos
Bhrentox 2 4,081 Último mensaje 23 Mayo 2012, 19:14 pm
por HdM
Como hacer esta consulta mysql desde php?
Bases de Datos
dyhsoluciones 1 3,395 Último mensaje 14 Julio 2012, 04:02 am
por Yoghurt
Como ejecutar esta consulta?
Programación Visual Basic
menu151 0 2,389 Último mensaje 5 Febrero 2013, 05:25 am
por menu151
[Pregunta]: ¿Cómo puedo hacer esta consulta?
Bases de Datos
Leguim 6 5,848 Último mensaje 22 Abril 2021, 05:24 am
por Leguim
[Pregunta]: ¿Cómo hacer esta consulta 2?
Bases de Datos
Leguim 0 3,639 Último mensaje 23 Abril 2021, 00:07 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines