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

Campo con 2 valores en 1. Como compararlo?

Estas en el tema de Campo con 2 valores en 1. Como compararlo? en el foro de Mysql en Foros del Web. Buenas Estoy manejando una base de datos externa que tiene un campo llamado "puntos" y tiene 2 valores en si separados por un espacio. Llamemoslos ...
  #1 (permalink)  
Antiguo 02/04/2011, 18:42
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Busqueda Campo con 2 valores en 1. Como compararlo?

Buenas

Estoy manejando una base de datos externa que tiene un campo llamado "puntos" y tiene 2 valores en si separados por un espacio.
Llamemoslos puntosA y puntosB. El campo es un varchar

Ej:
150 300

Ese tendria 150 puntosA y 300 puntosB

Mi duda es si hay alguna forma en la que yo pueda interactuar con ellos... necesito sacar por ej todos los que tienen mas de 50 puntosA y puntosB.

NO PUEDO crear 2 campos y hacerlos por separado.

Hay alguna forma posible?

Gracias

Saludos
  #2 (permalink)  
Antiguo 02/04/2011, 20:54
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: Campo con 2 valores en 1. Como compararlo?

Lo mejor es ponerlos en campos separados (lo campos multivaluados violan el paradigma de las bases de datos relacionales).
Tal y como están lo único que hacen es complicar las consultas.
__________________
¿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 03/04/2011, 03:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Campo con 2 valores en 1. Como compararlo?

Estoy con gnzsoloyo.
Pero si te es imposible, puedes usar SUBSTRING_INDEX de MySQL, aunque eso haría menos portátil a otras bases tu consulta, si bien eso podría solucionarse con SUBSTR() y LOCATE(), es decir, buscando la posición del espacio en blanco.
Código MySQL:
Ver original
  1. SELECT SUBSTRING_INDEX(puntos, ' ', 1) puntosA, SUBSTRING_INDEX(puntos, ' ', -1) puntosB
  2.  FROM tutabla
Observa lo que ocurre
Si quieres encontrar los registros en los que los dos tienen más de 50
Código MySQL:
Ver original
  1. SELECT puntos FROM tutabla
  2.  WHERE SUBSTRING_INDEX(puntos, ' ', 1) > 50 AND SUBSTRING_INDEX(puntos, ' ', -1) > 50
Pero vuelvo a recordarte lo que te ha dicho gnzsoloyo: esto no es lo adecuado para una base relacional; de hecho violas sus normas. Y tú te encontrarás con más problemas que tendrás que resolver (vacíos si los hay), y te servirá si el número puntaciones siempre es la misma y son sólo dos puntuaciones. Será más lento para todas las operaciones (trabajas con una cadena y no con campos numéricos: necesidad de hacer conversiones a número para medias, etc.) y alguna otra cosilla, por no hablarte de las dificultades para la actualización de datos.

Última edición por jurena; 03/04/2011 a las 10:19

Etiquetas: campos
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 11:24.