Foros del Web » Programando para Internet » PHP »

Seleccionar id's distintos para q al introducir datos no se repitan

Estas en el tema de Seleccionar id's distintos para q al introducir datos no se repitan en el foro de PHP en Foros del Web. Buenos dias, tengo una intranet para la entrada de averias de las maquinas. antes solo las entraba una persona pero al abrir otra sucursal lo ...
  #1 (permalink)  
Antiguo 12/06/2006, 02:12
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Seleccionar id's distintos para q al introducir datos no se repitan

Buenos dias,
tengo una intranet para la entrada de averias de las maquinas.
antes solo las entraba una persona pero al abrir otra sucursal lo haran 2 personas a la vez.
Estas Averias las tengo refenciadas con un codigo, q es la fecha en formato aaaammdd mas el id averia, q es un campo interger en mi base de datos.
entonces para seleccionar la id mas grande hacia lo siguiente:
Código PHP:
$str="SELECT max(id_averia) as id_averia FROM averies";
$res=mysql_query($str) or die(mysql_error());
$nreg=mysql_num_rows($res);
if (
$nreg>0){
    
$fila=mysql_fetch_array($res);
    
$id_averia=$fila[id_averia];
    
//incrementa id_averia
    
$id_averia=$id_averia 1;

y asi sacaba el siguiente registro.
y entonces para refenciarla llamo ha esta funcion:
Código:
function referenciaaveria() {
	if (document.formalta.data_avis.value == '') {
		alert ("La Fecha de aviso és obligatoria.");
	}else{
		id_averia=document.formalta.id_averia.value;
		fecha=document.formalta.data_avis.value;
		var array_fecha = fecha.split("/") 
		dia = array_fecha[0]; 
		mes = array_fecha[1]; 
		ano = array_fecha[2]; 
		document.formalta.ref_averia.value = parseInt((ano)+(mes)+(dia)+(id_averia));
		formalta.grabar.disabled = false
	}
}
Ahora mi duda esta, si dos usuarios entran averias a la vez... como puedo hacer para q no seleccionen la misma id?
no me sirve el id autoincremental xq estare en las mismas para crear la referencia a las averias.

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #2 (permalink)  
Antiguo 12/06/2006, 04:13
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 4 meses
Puntos: 1
Almacena el nuevo identificador en una tabla auxiliar, cuando se introduzca un nuevo registro en la tabla principal, tomas el identificador desde la tabla auxiliar, lo asignas, seguido lo incrementas y lo almacenas en la auxiliar. De esta forma ya tienes preparado un nuevo identificador para otro registro.
  #3 (permalink)  
Antiguo 12/06/2006, 04:28
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
hola, gracias por la idea pero no me ha kedado muy clara.
haber si podrias explicarte un poko mas...
y una duda q me keda... Si los 2 usuarios entran a la vez los dos seleccionaran el mismo valor no? ya sea de la tabla auxiliar o de la prncipal, entonces tendran la misma referencia y eso no puede ser.
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #4 (permalink)  
Antiguo 12/06/2006, 05:42
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 4 meses
Puntos: 1
Vamos ha ver.

Supongamos una tabla que almacena los avisos de averias, TblAverias.
y una tabla auxiliar que almacena los contadores, TblContadores.

Ahora imagina una página con unos cuantos botones, al pulsar en uno, llamamos a un formulario que recoge un nuevo aviso de averia, al cargarse el formulario, se genera una variable que llamare $IdAveria y que contendrá el valor almacenado en un campo (NewIdAveria), de la tabla TblContadores.
En codigo php sería:
Código PHP:
//Recuperar el Identificador de averia desde tabla auxiliar
$Sql "SELECT * FROM TblContadores";
$Query mysql_query($Sql);
$row mysql_fetch_array($Query);

//Asignar el valor para el identificador 
$IdAveria $row["NewIdAveria"];

//Incrermentar el identificador para generar uno nuevo y así
//tenerlo disponible para una nueva llamada.
$TmpIdAveria $IdAveria 1;

//Almacenar el nuevo Identificador en la tabla auxilir
$NewId "UPDATE TblContadores SET NewIdAveria = $TmpIdAveria;

//continuar con los campor que sean necesarios en el formulario..... 
ahora bien, ya tenemos el identificador en una variable, si se produce una nueva llamada al scrip que añade un nuevo registro a la tabla TblAverias, el proceso se repite y asi sucesivamente.

Tal como te lo puesto, la forma sencilla, lo que puede suceder es que el aviso de avería sea cancelado por la persona que está introduciendo los datos y que los identificadores almacenados no sean correlativos, si deseas ver todos los registros una simple consulta te los devuenve.
  #5 (permalink)  
Antiguo 12/06/2006, 06:03
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
ahora ya me ha kedado mas clara tu idea... la duda q me kedava despues de leer tu mensaje era para hacerlo correlativo para no perder numero de averias por el medio pero bueno con eso ya me sirver.

Gracias por tu ayuda rayder

Gracias por tu ayuda,

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #6 (permalink)  
Antiguo 12/06/2006, 06:06
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 4 meses
Puntos: 1
Un placer.
Si en algo te puedo ayudar, ya sabes.
  #7 (permalink)  
Antiguo 12/06/2006, 06:29
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
bueno.. puestos a preguntar ... habria la posibilidad de hacerlo correlativo?

Gracias de antemano

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #8 (permalink)  
Antiguo 12/06/2006, 06:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 4 meses
Puntos: 1
El sistema que te he comentado ya te los daría correlativos, sólo si un aviso es cancelado, el identificador almacenado en la tabla TblAverias no serian correlativos.

Para solucionar esto, pues habria varias formas, una de ellas sería utilizando hilos, asumo que la base de datos esta en MySql, otra sería generando un buffer de datos. Ademas habria que utilizar bloqueo de registro, flock() http://www.php.net/manual/es/function.flock.php

Te dejo un enlace, que aunque no trata el tema que comentamos, es interesante desde el punto de vista de como generar buffers de fichero, http://www.programacion.com/articulo...ido_sortbuffer
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 20:30.