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

Consulta de concordancia

Estas en el tema de Consulta de concordancia en el foro de Mysql en Foros del Web. hola a todos tengo la siguiente duda en mysql y no he hencontrado una respuesta tengo una tabal con las siguientes campos id prefijo destino ...
  #1 (permalink)  
Antiguo 10/02/2009, 13:43
 
Fecha de Ingreso: octubre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
Consulta de concordancia

hola a todos tengo la siguiente duda en mysql y no he hencontrado una respuesta
tengo una tabal con las siguientes campos id prefijo destino tarifa en los cuales almaceno prefijos dedetinos telefonicos internacionales ejemplo
prefijo= 34 destino= España tarifa=1.25 lo que quiero hacer es lo siguiente
tengo por ejemplo marcado el numero 34636126220 y necesito consultar este numero en la tabla para saber el destino y la tarifa que le corresponde pero aun no lo logro hacer agradesco sus generosas sugerencias
  #2 (permalink)  
Antiguo 10/02/2009, 14:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta de concordancia

Deberías decirnos qué tipo de campo es prefijo y numero; pero te diré que puedes hacerlo mediante esta consulta o alguna otra parecida.

SELECT nombretabla.telefono, nombretablaprefijos.prefijo, nombretablaprefijos.destino, nombretablaprefijos.tarifa FROM nombretabla INNER JOIN nombretablaprefijos ON prefijo = LEFT(telefono,2)

no lo he probado
  #3 (permalink)  
Antiguo 13/02/2009, 12:45
 
Fecha de Ingreso: octubre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta de concordancia

Hola agradesco tu respuesta

Mira el tipo de tabla
////////////////////////////////
CREATE TABLE IF NOT EXISTS `tarifas` (
`campo_id` int(11) NOT NULL AUTO_INCREMENT,
`prefijo` varchar(15) NOT NULL,
`destino` varchar(40) NOT NULL,
`tarifa` varchar(35) NOT NULL,
PRIMARY KEY (`campo_id`)
)
//////////////////////////////////////////
y un ejemplo d eun campo seria
INSERT INTO `tarifas` (`campo_id`, `prefijo`, `destino`, `tarifa`) VALUES
(null, '34', 'españa', '0.25')
otro dato seria
INSERT INTO `tarifas` (`campo_id`, `prefijo`, `destino`, `tarifa`) VALUES
(null, '346', 'españa mobile', '1.65')

ahora la pregunta seria
tengo el dato 34636126220 y quiero saber cual tarifa debo asignarle en este caso se ve a simple vista que es la correspondiente a españa mobile pero quiero saber como hacer la consulta en mysql para que me retorne el destino y la tarifa correspondiente agradesco su colaboracón
  #4 (permalink)  
Antiguo 13/02/2009, 15:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta de concordancia

Eso, creo, ya no es tan fácil. Deberías decirnos qué rango de teléfonos tendrás. Me explico. Piensa que el prefijo de país va desde el 1 de Estados Unidos hasta cuatro cifras, y sus cifras también son distintas. ¿Son sólo teléfonos españoles?; no puedes hacer un inner join on por dos y por tres cifras a la vez. Tendrías que comprobar primero si el prefijo de provincia empieza por 9,y probablemente condicionarás el inner join a eso. Pero para hacerlo tendrás que decirnos cuáles son todas las posibilidades, los rangos y sus diferencias.
  #5 (permalink)  
Antiguo 14/02/2009, 17:19
 
Fecha de Ingreso: octubre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta de concordancia

Hola

Mira la tabla tarifas va a contener todos los destinos mundiales tanto fijos como moviles y se tiene el munero a consultar pero segun el pais varia la cantidad de digitos.
Siempre tendre el numero completo para consultar en la base de datos la tarifa y el destino correspondiente a cada numero.
Agradesco tu cooperacion
  #6 (permalink)  
Antiguo 15/02/2009, 02:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta de concordancia

Edito:
he borrado la anterior propuesta, para hacerte esta otra:
Código sql:
Ver original
  1. SELECT ta.prefijo, ta.destino, ta.tarifa, LENGTH( ta.prefijo ) digpref
  2. FROM `tarifas` ta
  3. INNER JOIN telefono te ON LEFT( te.telefono, LENGTH( ta.prefijo ) )
  4. ORDER BY digpref DESC
  5. LIMIT 1
con ella encontrará sólo movileespaña cuando empiece por 346, aunque el número de dígitos coincida. En caso de coincidencia desde el comienzo, te mostrará sólo el número que tenga mayor número de coincidencias desde el principio.
Si se trata de una búsqueda y no del cruce de dos tablas, yo usaría algo así, dependiendo del número mayor de dígitos en un prefijo. Imaginemos que son 4
Código sql:
Ver original
  1. SELECT *
  2. FROM `tarifas`
  3. WHERE LEFT( '34636126220', 1 ) = prefijo
  4. OR LEFT( '34636126220', 2 ) = prefijo
  5. OR LEFT( '34636126220', 3 ) = prefijo
  6. OR LEFT( '34636126220', 4) = prefijo
  7. ORDER BY LENGTH( prefijo ) DESC LIMIT 1

Si el número de digitos de los distintos teléfonos (prefijo+resto de número) son distintos todos según el prefijo, resultará mucho más fácil y rápido, pero debes comprobar las distintas posibilidades.

Para esto también podrías usar programación, pero estamos en un foro de base de datos.

Última edición por jurena; 15/02/2009 a las 05:29
  #7 (permalink)  
Antiguo 07/03/2009, 12:27
 
Fecha de Ingreso: octubre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta de concordancia

hola jurena muchas gracias
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 19:33.