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

Una columna, diferentes valores

Estas en el tema de Una columna, diferentes valores en el foro de Mysql en Foros del Web. Wenas! Lo que pido supongo que es una tonteria, pero no encuentro la respuesta... Tengo la siguiente tabla options: user_id | option_id 1 | 1 ...
  #1 (permalink)  
Antiguo 28/09/2009, 11:44
Avatar de multimedf  
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Sonrisa Una columna, diferentes valores

Wenas!
Lo que pido supongo que es una tonteria, pero no encuentro la respuesta...
Tengo la siguiente tabla options:

user_id | option_id
1 | 1
1 | 23
1 | 25
2 | 4
5 | 20
2 | 23
1 | 3
2 | 13
2 | 3

Lo que quiero hacer es seleccionar los user_id que por ejemplo tengan option_id=23 AND option_id=3.

Si pongo:

'SELECT user_id FROM options WHERE option_id=23 AND option_id=3'

Obviamente no me devuelve ninguna fila. ¿Como tendria que hacerlo?

Si me pudieseis ayudar me seria muy útil!!
Gracias
  #2 (permalink)  
Antiguo 28/09/2009, 12:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Una columna, diferentes valores

cambia and por or

Cuando pones and asumes que debe ci¿umplir las dos condiciones al mismo tiempo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 28/09/2009, 12:15
Avatar de multimedf  
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Una columna, diferentes valores

huesos52, gracias por tu respuesta,

pero he aquí el problema, es que no es un valor u otro, se tienen que cumplir las dos condiciones, por lo que poner 'OR' no me sirve.

No se como solucionarlo...
  #4 (permalink)  
Antiguo 28/09/2009, 12:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Una columna, diferentes valores

No es posible. Un registro no puede tener 5 y 13 al mismo tiempo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 28/09/2009, 12:37
Avatar de multimedf  
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Una columna, diferentes valores

He encontrado una posible solución,
se podria unir la tabla a si misma de esta manera:

select user_id
from options a,
options b
where a.user_id = b.user_id
and a.option_id = 23
and b.option_id = 3

Supongo que esta es la manera de hacerlo...
Gracias!
  #6 (permalink)  
Antiguo 28/09/2009, 12:46
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: Una columna, diferentes valores

Código sql:
Ver original
  1. SELECT user_id
  2. FROM options o1 INNE JOIN options o2 USING (user_id)
  3. WHERE o1.option_id=23 AND o2.option_id=3;
El problema es que a medida que agregues parámetros habráque aumentar los INNER JOIN.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 28/09/2009, 13:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Una columna, diferentes valores

Código sql:
Ver original
  1. mysql> SELECT *FROM usuario_d;
  2. +---------+---------------+
  3. | user_id | user_password |
  4. +---------+---------------+
  5. |       1 | login1        |
  6. |       2 | login2        |
  7. |       3 | alejandro     |
  8. +---------+---------------+
  9. 3 ROWS IN SET (0.03 sec)
  10.  
  11. mysql> SELECT *FROM usuario_d WHERE user_id=1 AND user_id=3;
  12. Empty SET (0.02 sec)
  13.  
  14. mysql> SELECT *FROM usuario_d WHERE user_id=1 OR user_id=3;
  15. +---------+---------------+
  16. | user_id | user_password |
  17. +---------+---------------+
  18. |       1 | login1        |
  19. |       3 | alejandro     |
  20. +---------+---------------+
  21. 2 ROWS IN SET (0.00 sec)
  22.  
  23. mysql> SELECT *FROM usuario_d u1 INNER JOIN usuario_d u2 USING(user_id) WHERE u1.user_id=1 AND u2.user_id=3;
  24. Empty SET (0.00 sec)

No es lo mismo?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 28/09/2009, 14:25
Avatar de multimedf  
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Una columna, diferentes valores

Huesos no es lo mismo como lo planteas tu. No es un campo Autoincrement, se trata de un campo de clave foranea.

Lo que dice gnzsoloyo es correcto.

De todas formas muchas gracias huesos ;).
  #9 (permalink)  
Antiguo 29/09/2009, 05:32
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: Una columna, diferentes valores

Una posible solución es hacer un agrupado por "user_id" y un campo COUNT(). En el HAVING hacemos que muestro solo los registros en los que el count() es igual a 2 y listo. Algo así:

Código:
SELECT user_id FROM prueba p WHERE (option_id=1 or option_id=2) GROUP BY user_id HAVING COUNT(user_id)=2;
Ahora bien, hay que asegurarse que los option_id no están repetidos para el mismo usuario. Para ello estaría bien crear un UNIQUE KEY con estos dos campos.

Un saludo
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 04:14.