MySQL - SELECT algo complicado

 
Vista:
sin imagen de perfil

SELECT algo complicado

Publicado por Zed Warck (3 intervenciones) el 20/08/2012 12:33:01
Buenas, les escribo porque ya me duele la cabeza de intentar escribir un algoritmo para la creación de una consulta y estoy atrancado con esto. Voy a simplificar mi problema para eliminar lo que no es relevante para la consulta y así dejar solo el problema básico:

Digamos que tengo 1 tabla con 3 campos: id, campoabuscar, camponumerico

campoabuscar contienes los ids de otra tabla digamos para simplificar que son nombres de niños por ejemplo.

camponumerico son los ids de otra tabla que contiene digamos objetos.
Pongamos que el objeto 1 son canicas, y el 9 son cromos.


Por lo que esta tabla hace referencia a que niño tiene tal objeto...


Digamos que tengo estos valores:
id campoabuscar camponumerico

1 13 63
2 13 9
3 13 1
4 13 3
5 13 27
6 13 49
7 12 63
8 12 9
9 12 1
10 12 25
11 12 11
12 12 64
13 11 1
14 11 3
15 11 25
16 11 49
17 11 64
18 3 9
19 3 5
20 3 32

Como podemos ver:
3 niños (13,12,11) tienen canicas.
3 niños (13,12,3) tienen cromos.

Como se construirá el WHERE si quiero saber que niño tiene canicas y cromos (las 2 cosas a la vez) .. La solución tendría que ser 13 y 12.

Creo que mi problema esta en la estructura creo. Ya que no puedo hacer un where que diga: WHERE camponumerico=1 AND componumerico=9 (Esto es incorrecto)

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

SOLUCION!

Publicado por Zed Warck (3 intervenciones) el 20/08/2012 14:03:17
Bueno, después de muchas pruebas ya lo he conseguido. Gracias a aquellos que lo hayan intentando resolver. Dejo la solución por si alguien le surge un problema parecido:

SELECT campoabuscar FROM tabla
WHERE camponumerico=1
AND campoabuscar IN (SELECT campoabuscar FROM tabla WHERE camponumerico=9 GROUP BY campoabuscar)

Ademas mi problema real no se basaba solo en restriccion a 2 numeros, sino a 2,3,4,x numeros. Así que por cada dato que se desea buscar extra se le añade otra subconsulta. asi que si buscamos un 3º con el numero 25 por ejemplo sería agregar:


AND campoabuscar IN (SELECT campoabuscar FROM tabla WHERE camponumerico=25 GROUP BY campoabuscar)

y así sucesivamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

SOLUCION!

Publicado por xve (1151 intervenciones) el 20/08/2012 20:28:39
Gracias por comentarlo Zed!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SOLUCION!

Publicado por Zed Warck (3 intervenciones) el 21/08/2012 09:50:54
Bueno ya para finalizar el Hilo, aquí tenéis una solución mas sencilla del problema en cuestión:

SELECT campoabuscar FROM tabla
-> WHERE camponumerico IN (n1, n2, nx..)
-> GROUP BY campoabuscar
-> HAVING COUNT(*) = x;

Donde 'n1,n2,nx' son los números a buscar que sean comunes y 'x' el numero de números comunes. Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar