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

No se como montar esta consulta SQL

Estas en el tema de No se como montar esta consulta SQL en el foro de Mysql en Foros del Web. Buenas! Les explico mi problema con un ejemplo: Supongamos la siguiente tabla: term_id - object_id 1 - 447 1 - 448 1 - 449 1 ...
  #1 (permalink)  
Antiguo 05/03/2015, 03:49
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
No se como montar esta consulta SQL

Buenas!
Les explico mi problema con un ejemplo:

Supongamos la siguiente tabla:

term_id - object_id
1 - 447
1 - 448
1 - 449
1 - 450
1 - 451
18 - 450
19 - 447
20 - 448
21 - 449
22 - 451

Como pueden ver, los "object_id" pueden tener varios "term_id".
Quisiera sacar los "object_id" que tengan el "term_id"=1 y a su vez tengan también el "term_id"=19, 20 o 21

El resultado deberia ser, una SQL que me devuelva los object_id 447,448 y 449

Habia SQLs como:
Código MySQL:
Ver original
  1. SELECT object_id FROM tabla WHERE term_id=1 AND (tern_id>=19 OR tern_id<=21)
Código MySQL:
Ver original
  1. SELECT object_id FROM tabla WHERE term_id=1 AND tern_id BETWEEN 19 AND 21
etc... pero no doy con una consulta valida.

¿alguna idea?
__________________
Follow me on twitter @franbedia

Última edición por gnzsoloyo; 05/03/2015 a las 05:43 Razón: Por favor, USAR LOS HIGHLIGHT
  #2 (permalink)  
Antiguo 05/03/2015, 05:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No se como montar esta consulta SQL

Es una consulta para ver el manual de referencia, o algun tutorial...

Mira, tienes un set de valores que necesitas comparar contra un único campo (eso es lo que describes), compuesto por los valores, 1, 19, 20 y 21. Es decir que los registros a obtener tienen que tener el campos incluido EN esa lista de valores.

Ver IN en: http://dev.mysql.com/doc/refman/5.6/...ubqueries.html

Código MySQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/03/2015, 04:16
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: No se como montar esta consulta SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es una consulta para ver el manual de referencia, o algun tutorial...

Mira, tienes un set de valores que necesitas comparar contra un único campo (eso es lo que describes), compuesto por los valores, 1, 19, 20 y 21. Es decir que los registros a obtener tienen que tener el campos incluido EN esa lista de valores.

Ver IN en: http://dev.mysql.com/doc/refman/5.6/...ubqueries.html

Código MySQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21)
Gracias por la respuesta, desconocía la condición "IN".
Sin embargo, no he conseguido realizar la consulta, ya que únicamente quiero los object_id que tengan el term_id=1 y que ademas tambien tengan el term_id 19,20,21
Tu consulta me devuelve todos los object con el term_id=1 que son muchos...:
Código MySQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21)

El tema es que en mi BD tengo muchos object con term_id=1 (mas de 100)... pero muy pocos que tambien tengan el term_id=19,20 y 21, que son en realidad los que para una sección especifica quiero mostrar.

Por el momento, he conseguido solucionarlo con una SQL que me de todos los object con term_id=1 y dentro del bluque haciendo otra SQL que compruebe si dicho objeto tambien tenga el term_id 19,20 o 21
Pero me gustaria optimizar y dejarlo todo en una SQL... la verdad que por como despues avanza la funcion me facilitaria la programacion y creo que a la larga seria mas optima la web respecto a rendimiento.

Saludos.
__________________
Follow me on twitter @franbedia
  #4 (permalink)  
Antiguo 06/03/2015, 08:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No se como montar esta consulta SQL

Código SQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21) AND term_id =100
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 09/03/2015, 03:28
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: No se como montar esta consulta SQL

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21) AND term_id =100
Hola!
Gracias por la respuesta, aunque querrias decir:

Código SQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(1, 19, 20, 21) AND term_id =1

Esta SQL la habia probado ya.... pero me devuelve todos los objetos que tienen term_id=1 por lo cual no me vale.
Yo solo quiero los objetos con term_id=1 y que ademas tengan tambien el term_id=19,20 o 21

PD:
La sigiente SQL:
Código SQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE term_id IN(19, 20, 21) AND term_id =1

Probada también pero no me trae ningun resultado :S

Saludos.
__________________
Follow me on twitter @franbedia
  #6 (permalink)  
Antiguo 09/03/2015, 10:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No se como montar esta consulta SQL

una pregunta, tus datos estan multivaluados?? esto que quiere decir que si tienes el id 1 tambien puede tener el id 20??? porque esta consulta:

Código SQL:
Ver original
  1. SELECT object_id
  2. FROM tabla
  3. WHERE (term_id IN(1, 19, 20, 21) AND term_id =1)

regresa los id's que tengan 1 y el valor del in, pero si en tus datos no estan asi entonces no va a regresar lo que necesitas, podrias poner un ejemplo de tus datos???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 10/03/2015, 02:33
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: No se como montar esta consulta SQL

Gracias por la respuesta Libras, quizás debería haber empezado con un ejemplo para dejarlo mas claro si. Os dejo uno a continuación:

En una web, tengo una serie de "entradas/post"... por ejemplo:

Cita:
1- Hoy se presenta la nueva caja de armas de la Operacion Vanguard
2- Detalles de la Operacion Vanguard
3- Mejores jugadores del Ktowice 2014
4- AK-47 | Laminado Rojo
5- AK-47 | Rayo Esmeralda
6- AK-47 | Depredador
7- AWP | Grafito
8- USP-S | Guardian
9- Votacion mejor Skin AK-47
10- La Operación Vanguard Extendida hasta finales de Marzo
Por otro lado, tengo una tabla de "tags/terminos" como podrian ser:

Cita:
1- Noticias en Genral
2- Operación Vanguard
3- Armas de tipo clasificado
4- Armas de tipo restringido
5- Armas de grado militar
6- AK-47
7- AWP
etc...
Una entrada, puede tener asociados varios términos:

POST - TERMINO
1 - 2
4 - 2
4 - 3
4 - 6
7 - 2
7 - 3
8 - 2
8 - 3

En la web, hay un menu que es "Operacion Vanguard" donde muestro todos las entradas que tienen asociado el termino 2 (Operacion Vanguard): se mostraran todo lo relacionado con la Operacion Vanguard; noticias, fotos, videos, armas, etc....
Esta SQL es sencilla, ya que solo necesito objener todos las entradas (objetc_id) cullo termino (term_id) sea 2
Código SQL:
Ver original
  1. SELECT object_id FROM tabla WHERE term_id=2

Ahora bien, tengo otra sección "Armas de la Operacion Vanguard" donde únicamente quiero mostrar las armas de la Operación. Para ello, necesito obtener todas las entradas (object_id) que tenga el term_id=2 y tambien el 3,4 o 5 (su clasificacion)
Esta es la SQL que no soy capaz de obtener.
La siguiente Query no me vale porque muestra todas las entradas con term_id=2:
Código MySQL:
Ver original
  1. SELECT object_id FROM tabla WHERE term_id=2 AND term_id IN (3,4,5)

Tampoco me sirve la siguiente, ya que hay otras "Operaciones" que tienen armas asociadas a estos terminos:
Código MySQL:
Ver original
  1. SELECT object_id FROM tabla WHERE term_id IN (3,4,5)

Espero haberme explicado bien.
Un saludo.
__________________
Follow me on twitter @franbedia
  #8 (permalink)  
Antiguo 10/03/2015, 08:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No se como montar esta consulta SQL

pregunta, los datos que mencionas se almancenan en una sola tabla????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 10/03/2015, 09:02
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: No se como montar esta consulta SQL

En 3 tablas.
En realidad se trata de un Wordpress, en el cual estoy "adaptando/reprogramando" las paginas para que se adapte al objetivo.

Las tablas son las siguientes:

wp_post: contiene las entradas, en mi ejemplo seria donde esta el "object_id".
object_id, post_author, post_title, post_content...etc.

wp_terms: contiene los terminos, en el ejemplo serian los "term_id"
term_id, term_name, slug...etc

wp_terms_relationships: es la que relaciona entradas y terminos, contiene un "objetc_id" y "term_id"
object_id, term_id, order
__________________
Follow me on twitter @franbedia
  #10 (permalink)  
Antiguo 10/03/2015, 09:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No se como montar esta consulta SQL

mira nada mas ahi esta la cosa jejejeje para obtener lo que ocupas seria algo como esto:


Código SQL:
Ver original
  1. SELECT * FROM wp_post AS t1
  2. LEFT JOIN wp_terms_relationships AS t2 ON (t1.object_id=t2.object_id)
  3. LEFT JOIN wp_terms AS t3 ON (t2.term_id=t3.term_id)
  4. WHERE t1.object_id=100 AND t2.object_id IN (3,4,5)

Aqui el problema es que nunca mencionaste que los datos no salian de la misma tabla........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: montar, select, sql, tabla
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 00:23.