Foros del Web » Programando para Internet » PHP »

¿Cómo obtener el id de multiples registros insertados en una consulta?

Estas en el tema de ¿Cómo obtener el id de multiples registros insertados en una consulta? en el foro de PHP en Foros del Web. Buenas tardes pues como dice el título tengo esta duda, por ejemplo si tengo una consulta como esta Código PHP: INSERT INTO tabla  ( campo1 ,  campo2 ...
  #1 (permalink)  
Antiguo 31/05/2016, 16:27
Avatar de eymer1235  
Fecha de Ingreso: mayo-2016
Mensajes: 2
Antigüedad: 7 años, 10 meses
Puntos: 0
¿Cómo obtener el id de multiples registros insertados en una consulta?


Buenas tardes pues como dice el título tengo esta duda, por ejemplo si tengo una consulta como esta
Código PHP:
INSERT INTO tabla (campo1campo2campo3VALUES
(valorvalor,valor ),
(
valorvalorvalor),
(
valorvalorvalor); 
como haría para obtener el id de cada uno de esos registros insertados, pero claro desde PHP.

Explico mi caso, tengo una tabla examen otra valores y una examen_has_valores
la tabla valores tiene su id auto-incrementable con los datos del examen a registrar, la tabla valores tiene su id-auto-incrementable con sus otros campos como unidad, etc.
Entonces en la tabla examen_has_valores esta el id de la tabla examen y el id de la tabla valores, cuando el despliegue del examen es simple recibe un solo valor, al hacer los inserts puedo utilizar mysql_insert_id() para obtener los id e insertarlos en la tabla examen_has_valores, pero cuando el despliegue es compuesto el examen contendría varios valores para hacer este insert tengo este código:

Código PHP:
$query3 "INSERT INTO valores VALUES ";
            foreach (
$valores_dep as $key => $value){ 
                 
//echo "{$valor[$key]}{$tipo_valores_dep[$key]}{$unidad[$key]}{$referencia[$key]}\n";

         
$query3 .= "(null,'{$tipo_valores_dep[$key]}','{$valor[$key]}','{$unidad[$key]}','{$referencia[$key]}'),";
        
                     

            };
            
//REMUEVO ULTIMA COMA
            
$query3 substr($query30, -1); 
            
//echo $query3;  
            
$sql3 mysql_query($query3) or die(mysql_error()); 
El problema radica es que si uso mysql_insert_id() solo me arrojaría el último id de ese insert multiple y lo que quiero sería obtener el id de cada registro insertado en esa consulta para luego con una sentencia parecida insertar el id del examen con los diferentes id generados de esa sentencia. Se me olvidó mencionar estos exámenes son de laboratorio.
Espero me puedan ayudar. Gracias de antemano.

Última edición por eymer1235; 31/05/2016 a las 16:37
  #2 (permalink)  
Antiguo 31/05/2016, 16:55
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: ¿Cómo obtener el id de multiples registros insertados en una consulta?

MySql te devuelve el valor del último registro insertado en el campo ID como has dicho, tan solo tienes que contar cuantos registros has metido y restárselos al último ID.

Por ejemplo si ingresas tres nuevos registros y el último ID es 6, es de entender que los dos anteriores son 4 y 5, creo que no hay más complicación.
__________________
Diseño Web - Arisman Web
  #3 (permalink)  
Antiguo 31/05/2016, 20:52
Avatar de eymer1235  
Fecha de Ingreso: mayo-2016
Mensajes: 2
Antigüedad: 7 años, 10 meses
Puntos: 0
De acuerdo Respuesta: ¿Cómo obtener el id de multiples registros insertados en una consulta?

Cita:
Iniciado por manuparquegiralda Ver Mensaje
MySql te devuelve el valor del último registro insertado en el campo ID como has dicho, tan solo tienes que contar cuantos registros has metido y restárselos al último ID.

Por ejemplo si ingresas tres nuevos registros y el último ID es 6, es de entender que los dos anteriores son 4 y 5, creo que no hay más complicación.
Amigo muchas gracias con lo que me dijistes lo pude hacer, me quedó así:
Código PHP:
......................................Antes de esto hay más código......................................
$query3 "INSERT INTO valores VALUES ";
            foreach (
$valores_dep as $key => $value){ 
                 
//echo "{$valor[$key]}{$tipo_valores_dep[$key]}{$unidad[$key]}{$referencia[$key]}\n";

         
$query3 .= "(null,'{$tipo_valores_dep[$key]}','{$valor[$key]}','{$unidad[$key]}','{$referencia[$key]}'),";
        
                     

            };
            
//REMUEVO ULTIMA COMA
            
$query3 substr($query30, -1); 
            
//echo $query3;  
            
$sql3 mysql_query($query3) or die(mysql_error());
            
$ul mysql_insert_id();
            
$gm mysql_affected_rows();
            echo 
"Filas insertadas $gm";
            echo 
"Ultimo id $ul";

            
$final $ul+$gm-1;

        }
/*FIN INSERT VALORES CUANDO ES COMPUESTO*/

    
/* FIN VALIDACION DESPLIEGUE */

    /* INSERTO DATOS DE EXAMEN EN TABLA EXAMEN */
    
$query4 "INSERT INTO examen VALUES (null, '$tipo_examen','$codigo_examen','$nombre_examen','$muestra','$despliegue','$metodo','$precio')";
    
//echo "$query2";
    
$sql4 mysql_query($query4) or die(mysql_error());
    
$ultimo_examen mysql_insert_id();
    
//echo "Ultimo examen $ultimo_examen";

    
if ($sql4) {
            echo 
"<script>
                alert(\"Exámen registrado con exito.\");
            </script>"
;
    } else {
            echo 
"<script>
                alert(\"El exámen no pudo ser registrado con exito con exito.\");
            </script>"
;
    }

    for (
$i=$ul$i <= $final$i++) { 
                
//echo "$i <br>";
                
$query5 "INSERT INTO examen_has_valores VALUES ('$ultimo_examen','$i')";
                
$sql5 mysql_query($query5) or die (mysql_error());
            } 
Por supuesto falta terminar de validar el código y mejorarlo, ya que cuando se fuera a registrar un examen con un valor ya existente, tengo que hacer que tome el id de ese valor e insertarlo en la tabla relacionada, pero con esto me has sacado de un problema. Muchas gracias.
PD: el mysql_insert_id() no me arroja el último sino el primer id de esos registros, por ejemplo si los registros eran 6, 7, 8 y 9, me arroja es 6.

Etiquetas: sql, tabla
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 00:59.