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

[SOLUCIONADO] Necesito obtener el maximo valor de una tabla

Estas en el tema de Necesito obtener el maximo valor de una tabla en el foro de Bases de Datos General en Foros del Web. Estoy trantando de obtener el maximo valor de una tabla ya que con el primera letra del apellido le agrego un correlativo idarchivo | nombres ...
  #1 (permalink)  
Antiguo 01/09/2013, 16:15
 
Fecha de Ingreso: mayo-2013
Ubicación: San Vicente
Mensajes: 127
Antigüedad: 11 años, 6 meses
Puntos: 1
Busqueda Necesito obtener el maximo valor de una tabla

Estoy trantando de obtener el maximo valor de una tabla ya que con el primera letra del apellido le agrego un correlativo

idarchivo | nombres | apellidos | cod |
+-----------+------------------------+-------------------------+------+
| 1 | Carlos Rene | Montano Arias | M1 |
| 2 | Carlos Rene | Montano | M2 |
| 3 | Maria Dolores | Arias | A1 |
| 4 | Mario Alexander | Pineda | P1 |
| 5 | Mauricio Jose | Montano | M3 |
| 6 | Pedro Alonso | Barrillas | B1 |
| 7 | Pedro Alonso | Barrillas | B2 |
| 8 | Martin Gerardo | Zapata Ayala | Z1 |
| 9 | Gloria Marai | Escobar | E1 |
| 10 | Marcos Aurelio | Fernandez | F2 |
| 11 | Mario Antonio | Perez | P2 |
| 12 | Karla Eunice | Funes | F1 |
| 13 | Karla Eunice | Montano Arias | M4 |
| 14 | Carlos Rene | Montenegro | M5 |
| 15 | Carlos Rene | Valladares | V1 |
| 16 | Juan Antonio | Valencia | V2 |
| 17 | Antonio Jose | Arias | A2 |
| 18 | Maria Jose | Montes | M6 |
| 19 | Maria Jose | Monterrosa | M7 |
| 20 | Isidro | Gutierrez | G1 |
| 21 | Juan Jose | Mendez Saravia | M8 |
| 22 | Marcos Manuel | Morataya Valencia | M9 |
| 27 | Pablo Antonio | Montes Segura | M10 |
| 28 | Pedro Pablo | Lemus | L1

utilizo esta sentancia de mysql
select max(cod) from `archivo` where `cod` like '%m%' pero el problema es que me llama hasta la M9 que es el registro 22 pero necesito me mande a llamar el M10 ya que a ese registro yo despues le extraere la letra y el numero para crear el correlativo a esa letra y crear el codigo del proximo usuario la columna cod es un varchar.

Me podrian ayudar a dar una idea de como manejar esto. gracias
  #2 (permalink)  
Antiguo 01/09/2013, 17:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Necesito obtener el maximo valor de una tabla

Valores como M9, M10, M3 o cualquier otro semejante son alfanuméricos, y no numéricos, por lo que se evalúan alfabéticamente, y en ese contexto, el M9 está después del M10.
Es decir: no hay error.
El tema es que no se puede obtener un ordenamiento como el que buscas en ese contexto. Habría que "partir" la cadena en la consulta para poder evaluar la parte numérico por separado, o bien que los valores se cargaran de un modo más eficiente (M01, M02, ... M09, M10, ...).
Infortunadamente, lograr que se evalúe la parte numérica por separado puede implicar funciones algo complicadas, y poco seguras, si los valores cambian la cantidad de letras.
Exste una posibilidad de crear una funcion almacenada en MySQL para lograrlo, pero es un tema fuera del PHP.
__________________
¿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 01/09/2013, 19:38
 
Fecha de Ingreso: mayo-2013
Ubicación: San Vicente
Mensajes: 127
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Necesito obtener el maximo valor de una tabla

Y que tengo que hacer para que me puedan dar una luz otra opcion que pensaba es crear una tabla solo para letras y otra para los numeros pero intento y no me sale ningun query
  #4 (permalink)  
Antiguo 01/09/2013, 19:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Necesito obtener el maximo valor de una tabla

En realidad el tema, según ese plateo no pasa por crear una tabla, sino agregarle una columna a la tabla.
Simplemente una columna para el código alfabético, y otra para el numérico, y luego se ordena por ambos.
Supongamos que separases la letra del número, y que el número fuese opcional (nulable). en ese caso la consulta sería simplemente:
Código MySQL:
Ver original
  1. select cod, numcod
  2. from `archivo`
  3. where `cod` like 'm%'
  4. ORDER BY cod DESC, numcod DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 02/09/2013, 01:28
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 11 años, 4 meses
Puntos: 9
Respuesta: Necesito obtener el maximo valor de una tabla

Intenta probar esto a ver si te funciona:

Código SQL:
Ver original
  1. SELECT *
  2. FROM archivo
  3. WHERE cod LIKE 'M%'
  4. ORDER BY CAST(SUBSTRING(cod, 2) AS SIGNED INTEGER) DESC
  5. LIMIT 1
  #6 (permalink)  
Antiguo 04/09/2013, 19:12
 
Fecha de Ingreso: mayo-2013
Ubicación: San Vicente
Mensajes: 127
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Necesito obtener el maximo valor de una tabla

Hola hermano fijate que por motivos de trabajo no he podido utilizar los dos query espero poder implemantarlos esta semana gracias

Última edición por sarrhen; 04/09/2013 a las 19:32
  #7 (permalink)  
Antiguo 19/10/2013, 21:09
 
Fecha de Ingreso: mayo-2013
Ubicación: San Vicente
Mensajes: 127
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Necesito obtener el maximo valor de una tabla

Disculpa la tardanza pero esta fuera de linea por inconvenientes medicos gracias por la ayuda lo implemente y me funciona de maravilla

Etiquetas: maximo, mysql, php, registro, select, tabla, valor
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:42.