Foros del Web » Programando para Internet » PHP »

rango de numeros, como saberlo?

Estas en el tema de rango de numeros, como saberlo? en el foro de PHP en Foros del Web. amigos tengo una tabla ern Mysql con tres campos (ID, N_registro, Cedula) la cual tiene como mas o menos 6000 registros o cedulas. Lo que ...
  #1 (permalink)  
Antiguo 25/04/2006, 13:09
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 15 años
Puntos: 1
rango de numeros, como saberlo?

amigos tengo una tabla ern Mysql con tres campos (ID, N_registro, Cedula)
la cual tiene como mas o menos 6000 registros o cedulas.
Lo que quiero saber como puedo hacer un modulo que me visalize o me diga en donde puedo meter una cedula nueva segun el numero de ella ordenada de menor a mayor.

Me explico con un ejemplo la cedula Nº 9883255 pertenece al registro Nº 2500, si por casualidda se registra una cedula que es la 9883260 deberia tocarle el Nº registro 2500-0001, ya que lo colocaria en orde de cedula de menor a mayor??????? como puedo lograr esto en un modulo de php
Que identifique un rango de cedula con su Nº registro respctivo y me indique cual sera la continuacion del mismo????

Alguien me da una idea, o me sugiere como seria mejor automatizar este proceso es para un archi-movil de una universidad en donde trabajo
__________________
Miguel Padrón :cool:
  #2 (permalink)  
Antiguo 25/04/2006, 14:53
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 15 años, 6 meses
Puntos: 7
creo que mejor deberias dejar que se inserten las cedulas en cualquier punto y usas el order by cedula para mostrarlas
__________________
No tengo firma ahora... :(
  #3 (permalink)  
Antiguo 25/04/2006, 15:05
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 15 años
Puntos: 1
Mickel, lo pensen ante de hacer esta pregunta, pero no me resulta ya que inicialmente ya las cedulas tienen todos los registro colocados y lo que queremos es en vez de colocarlos como tu dice, nosotros colocar el registro segun pertenece entre el rango que le toca.

Gracias por la sugerencia, si alguien me puede aportar otras ideas o solucion a esta pregunta se lo agradeceria
__________________
Miguel Padrón :cool:
  #4 (permalink)  
Antiguo 25/04/2006, 16:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si entendí bien .. lo que necesitas es calcular un nuevo "N_registro" que sea correlativo en función del N° de cedula ..

Si es así .. "supongo" qu eese "N_registro" va en función del ID? .. o de que valor?, esto es importante que describas ese "algorítmo" ..

"Suponiendo" que fuese en relación al "ID" .. podrías obtener ese ID de la primera cedula mayor o igual al que deseas "generar ese N_registro" (ojo que no hablo de "insertar" por médio físicamente ese registro .. sólo de obtener ese N_registro).

SELECT ID FROM tabla WHERE cedula >= '$cedula' LIMIT 1

Obtenido ese "ID" .. le podrías sumar 1 (una unidad o aplicar el algorímo que corresponda en función de ese dato) y verificar que no exista ese N_Registro generado. Si no existe .. generas un nuevo INSERT (nuevo registro) a tu BBDD con ese N_Registro generado y el ID que corresponda (autonumérico supongo ..).

Cuando generes tus reportes/listados .. ya ordenaras por tu "cedula" . .o por el N_registro .. (el "ID" ya no te daría la misma correlación que ese "N_registro <-> cedula" si es que se basa ese n° en ese dato??=?=)

En fin, como veras .. falta que -definas- como se ha de generear ese "N_registro" . .en función de que parámetros ..

Consejo para futuro: si te basas en ese "ID" para tus n° de "registro" simplemente -sobra- todo ese ´cálculo .. ya tienes un numero único, que no se repite y que NO se ocupa por otro registro si este desaparece (lo eliminas) para mantener entre otras cosas una de las primeras reglas de la "integridad referencial" de datos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 26/04/2006, 16:34
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 15 años
Puntos: 1
Cluster, voy a realizar tus concejos creo que tu tienes razon, estoy trabajando en codigo y pronto te lo presentare, a ver si me ayudas

Gracias por tu orientacion
__________________
Miguel Padrón :cool:
  #6 (permalink)  
Antiguo 28/04/2006, 10:09
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 15 años
Puntos: 1
Cluster, revisando las sugerencia que me has dado, y gaciendo un codigo que me busque la cedula que se acerca a la que estoy introduciendo segun este sql:
SELECT ID FROM tabla WHERE cedula >= '$cedula' LIMIT 1

Me arroja resultado contradictorio.
El N registro en este moiemento es colocado en forma manual, y lo que quiero es colocarlo en forma automatica, que busque dentro de las cedulas el lugar que le coresponda si es ante de una o otra cedula y que coloque ese N registro

Me explico tengo la cedula 9883255 que coresponde al N registro 2000, cuando el usuario introduzca una nueva cedula la 9883256 por ejemplo le coloque como N registro la 2000-0001, es decir que esta localizada en la carpeta N registro 2000, pero en la sucarpeta 0001. Espero que se vea claro

Por lo moento uso una consulta para visualizar todo la BD y visualmente veo a que carpeta pertenece una cedula nueva si esta por encima o por de bajo de una para colocarle el refgistro pertinente.

El codigo que elabore a partir de tu sugerencia es este:

Código PHP:
<?
$db
=mysql_connect("localhost","root","");// los datos de tu webhost 
mysql_select_db("archi_movil_postgrado",$db);// el nombre de la base de datos 


$find $_POST['buscar'];// campo en donde esta el texto que quieres encontrar 
$query_busqueda "SELECT * FROM estu_postgrado WHERE Cedula >='".$find."' LIMIT 1" // esta sentencia te va a buscar todos los campos de texto que contengan los textos que introduzcas  
//introduce el nombre de la tabla y los registros que quieras buscar 
$result_busqueda mysql_query($query_busqueda$db); 
$row_busqueda ''
           
if (
mysql_num_rows($result_busqueda ) == 0)

echo 
"Lo sentimos usted no se encuentra en Base de Datos" 

               
while(
$row_busqueda mysql_fetch_array($result_busqueda))

echo  
"<B>ID</B>  ".$row_busqueda['ID'] . "<br>"
echo  
"<B>N Registro</B>  ".$row_busqueda['N_registro'] . "<br>"
echo  
"<B>Cedula</B>  ".$row_busqueda['Cedula'] . "<br>"
//echo  $row_busqueda['Login'] . "<br>"; 

mysql_close($db);
?>
El ID a autonumerico y creciente y lo uso para otros modulos de modificar, eliminar etc

Por favor una ayuda a este dilema
__________________
Miguel Padrón :cool:
  #7 (permalink)  
Antiguo 28/04/2006, 12:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. sigo sin entender ese patrón que usas o algorítmo .. ¿De donde sale ese "200" que usas como "prefijo" de tu n° de registro .. ?

La consulta SQL que te sugería .. busca el mayor o igual "cedula" al que indicas. Realmente deberías:

1) comprobar que NO exista ya esa cédula (algo tipo):
SELECT COUNT(*) WHERE Cedula = $fin

2) Resto del proceso.

A la "rápida" te sugería que buscases el ID que pertenezca al anterior o siguiente "Cedula" (si es que te vas a basar en ese ID? .. por qué realmente no lo sé ya .. debes esplicar con "peras y manzanas" como le das ese n° en bse a qué? .. Por lo menos ya tendría algo para continuar con el proceso de generación ..

Tal vez no sea la mejor forma mi propuesta ni la más óptima ni esté completa .. pero realmente NO me queda claro cual es el "algorítmo" que tu usas para definir ese n° .. Cuanto mejor lo expliques y detalles .. la gente que intente responderte te podrá dar mejores alternativas (y que te funcionen).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 28/04/2006, 13:14
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 15 años
Puntos: 1
Ok, ante todo te pido disculpa si te enredo en lo que trato de eplicar
Tratatere de otra forma, hay voy:

Se relaizo en los meses anteriores una especie de inventario de todo los expedientes de estudiates que tiene la isntitucion en donde trabajo, obteniendo u registro aproximado de 6 mil estudiantes que representa 6 mil carpeta con todos sus expedientes por lo que hay el mismo numero de expediente.

Cuando colocaron todas las carpetas con dichos expedientes se le asigno un numero corerlativo desde la cedula por ejemplo 635258 N registro 1....... hasta la cedula 21254879 N registro 6000.

Es decir este N registro es manual por la primera vez que se ordeno tales carpetas (expedientes).
Lo que me pidieron los del control de estudios de la isntitucion es que ideara una BD, para añadir, modificar, eliminar y consultar esos registro ya relaizado

Pero que al moemento de que un estudiantes se le registrara como nuevo, lo colocara segun el oden de cedula pero con el registro susecivo, es decir si dentro de BD hay una cedula 9883255 cuyo N registro es 2000, y la cedula nueva es 9883256 le tocaria el N registro 2000-0001
ojo 2000 es la carpeta que le toca originalmente a la cedula 9883255 y el ejemplo anterios seria carpeta 2000 subcarpeta 0001.


Gracias por tu paciencia, espero que me ayude
__________________
Miguel Padrón :cool:

Última edición por 8461277; 28/04/2006 a las 15:11
  #9 (permalink)  
Antiguo 29/04/2006, 12:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo siento .. pero si no entiendo lo que hay que hacer es dificil que pueda ayudarte. Sigo sin "comprender" el código "xxxx-yyyy". Pon más ejemplos (no tan "explicados" si más "gráficos" a ver si alguien entiende lo que pretendes hacer).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 30/04/2006, 04:25
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Cita:
es decir si dentro de BD hay una cedula 9883255 cuyo N registro es 2000, y la cedula nueva es 9883256 le tocaria el N registro 2000-0001
ojo 2000 es la carpeta que le toca originalmente a la cedula 9883255 y el ejemplo anterios seria carpeta 2000 subcarpeta 0001.


Antes de que quisieran implementar ese sistema de información en tu universidad mediante bases de datos, quiero decir, cuando comenzaron con toda esa 'organización' manual de datos, quizá se encontraron en ese momento con el problema de cómo se almacenaría la información de manera que fuera ordenada.

Al responsable del proyecto se le ocurrió esa forma y que hasta ahora les funcionó.

Para mí sería un error implementar esa solución a ciegas sólo por que al responsable de aquél proyecto no se lo ocurrió una idea mejor.

¿Por qué no hablas con el encargado del proyecto y les propones una solución óptima, en lugar de seguir arrastrando el error?

¿Qué pasaría si un estudiante con ID = 333 cambiara su dirección y tú quisieras conservar tanto la nueva como la antigua? ¿Harías un nuevo estudiante con ID = 333-00001 ??

Seguramente los encargados de control de archivos de la universidad quieren verse benenficiados con la implantación de la administración de estudiantes mediante sistemas informáticos, ellos no saben cómo pero tú los puedes orientar.

Ahora que si siguen con la necedad, tendrás que comprarte un aparato de masajes por todo el estrés que sufrirás cuando quieras (o te pidan) hacer consultas muy especializadas.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
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 02:57.