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

Obtener valor de un campo

Estas en el tema de Obtener valor de un campo en el foro de Mysql en Foros del Web. Hola a todos Necesito obtener el valor de un campo auto_increment, pero no se muy bien como hacerlo. He intentado hacerlo a través de select ...
  #1 (permalink)  
Antiguo 12/09/2009, 11:09
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Obtener valor de un campo

Hola a todos

Necesito obtener el valor de un campo auto_increment, pero no se muy bien como hacerlo. He intentado hacerlo a través de select y mysql_query pero no hay manera siempre me da el valor 0.

*la base de datos, se compone de dos tablas, libros y autores.

Código PHP:
$sql "insert into libros values (null,'$titulo','$editorial','$isbn','$precio')";
$sql2 ="insert into autores values (null,'$sql3','$autor')";
$sql3 ="select libros.id_libro from libros where titulo = '$titulo'"
lo que me interesa es que el valor que asigna el campo auto_increment a cada registro en la tabla libros sea el mismo en otro campo en la tabla autores.

Perdon por si no expreso con claridad.

salu2 y gracias
  #2 (permalink)  
Antiguo 12/09/2009, 12:36
 
Fecha de Ingreso: abril-2009
Ubicación: Miami
Mensajes: 182
Antigüedad: 15 años
Puntos: 8
Respuesta: Obtener valor de un campo

hola ...

Primero, te muestro como debería ser la consulta para insertar en la tabla:


mysql_query("insert into libros(titulo) values ('$titulo')",$link);

No entiendo en tu caso pq insertas un NULL en tu tabla, si es que estás queriendo "no insertar nada" con ese NULL en tu campo auto_increment pues no debes hacerlo así, simplemente ese campo AUTOMATICAMENTE tomará el entero consecutivo cuando insertes un registro en la tabla, prueba sacando ese NULL de tu consulta .... salu2
__________________
-----------------------------------
Éxitos !!! .. joao
  #3 (permalink)  
Antiguo 12/09/2009, 13:14
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

He probado de quitar el null, y sin eso no me lo coje.

Voy a poner todo el codigo a ver si no lio tanto
Código PHP:
<?php


$basedatos 
"test";
$titulohtmlentities($_GET["titulo"]);
$autorhtmlentities($_GET["autor"]);
$editorialhtmlentities($_GET["editorial"]);
$isbnhtmlentities($_GET["isbn"]);
$preciohtmlentities($_GET["precio"]);

$sql "insert into libros values (null,'$titulo','$editorial','$isbn','$precio')";
$sql2 ="insert into autores values (null,'$sql3','$autor')";//es este $sql3 donde quiero que su valor sea el de id_libro(que es un auto_increment y por lo tanto se asigna automaticamente)
$sql3 ="select libros.id_libro from libros where titulo = '$titulo'";

mysql_connect("localhost""root""prueba"); 
mysql_select_db("test"); 


 
$consulta="SELECT * FROM libros WHERE isbn='$isbn'";

$resultado=mysql_query($consulta) or die (mysql_error()); 

if (
mysql_num_rows($resultado) == 0


$result mysql_query($sql);
$result2 mysql_query($sql2);

if (!
$result && !$result2) {
    die(
"<h2 align='center'>No se ha podido crear la tabla mysql</h2>".mysql_error());
}else{

echo (
'<table width="390" border="0">
  <tr>
    <td width="384"><strong><u>El libro ha sido introducido correctamente, gracias.</u></strong></td>
  </tr>
</table>
<table width="390" border="0">
  <tr>
    <td width="384">¿Que desea hacer?</td>
  </tr>
</table>
<table width="317" border="1">
  <tr>
    <td width="145" align="center"><strong>Ir a inicio</strong></td>
    <td width="162" align="center" valign="bottom">'
);
echo
"<a href=\"javascript:history.back()\" ><strong>Introducir otro libro</strong></a></td>
  </tr>
</table>
"
;





}else{
    echo 
"<b>Error:</b> El libro introducido ya existe en nuestra base de datos, por favor introduzca otro ";
    echo 
"<a href=\"javascript:history.back()\">Regresar</a>";
}
?>
Gracias por contestar
  #4 (permalink)  
Antiguo 12/09/2009, 13:24
 
Fecha de Ingreso: abril-2009
Ubicación: Miami
Mensajes: 182
Antigüedad: 15 años
Puntos: 8
Sonrisa Respuesta: Obtener valor de un campo

.. LO que estás queriendo hacer es insertar un libro y luego ese ID que es auto_increment ponerlo en tu tabla de autores ?? .. si es así pues te propongo:

$sql = "SELECT * FROM `libros` ORDER BY id_libros DESC"; //si es que se llama id_libros
$result = mysql_query($sql, $link);
$row = mysql_fetch_array($result);
$i = 0;
while (($row)&&($i==0)){
$last_id = $row["id_libro"];//en este ciclo lo que hago es llegar al último registro y leer su id que es el auto_increment que estás buscando
$i = $i + 1;
}
mysql_free_result($result);

//esto te devuelve el último id de tu tabla libro, es decir, el último que se insertó, y puedes usar este $last_id para insertarlo en tu tabla de autores ....

Y repito, en tu INISERT del libro, no tienes que insertar NULL en tu campo auto_increment, el solito agarra el entero consecutivo ... espero te sirva .. salu2!!
__________________
-----------------------------------
Éxitos !!! .. joao
  #5 (permalink)  
Antiguo 12/09/2009, 14:59
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

Pues si, esa es mi intencion. para así luego poder relacionar autores y libros

Hee probado el codigo y me sale este error:

Warning: mysql_query() expects parameter 2 to be resource, null given in C:\xampp\htdocs\web\Scripts\upload_nuevo_libro.php on line 25

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\xampp\htdocs\web\Scripts\upload_nuevo_libro.php on line 26

Pongo como quedaria el codigo por si no lo he puesto bien
Código PHP:
<?php


$basedatos 
"test";
$titulohtmlentities($_GET["titulo"]);
$autorhtmlentities($_GET["autor"]);
$editorialhtmlentities($_GET["editorial"]);
$isbnhtmlentities($_GET["isbn"]);
$preciohtmlentities($_GET["precio"]);

$sql "insert into libros values (null,'$titulo','$editorial','$isbn','$precio')";
$sql2 ="insert into autores values (null,'$last_id','$autor')";

$sql3 "SELECT * FROM `libros` ORDER BY id_libro DESC"//si es que se llama id_libros
$result mysql_query($sql3$link);
$row mysql_fetch_array($result);
$i 0;
while ((
$row)&&($i==0)){
$last_id $row["id_libro"];//en este ciclo lo que hago es llegar al último registro y leer su id que es el auto_increment que estás buscando
$i $i 1;
}

mysql_connect("localhost""root""prueba"); 
mysql_select_db("test"); 


 
$consulta="SELECT * FROM libros WHERE isbn='$isbn'";

$resultado=mysql_query($consulta) or die (mysql_error()); 

if (
mysql_num_rows($resultado) == 0


$result mysql_query($sql);
$result2 mysql_query($sql2);

if (!
$result && !$result2) {
    die(
"<h2 align='center'>No se ha podido crear la tabla mysql</h2>".mysql_error());
}else{

echo (
'<table width="390" border="0">
  <tr>
    <td width="384"><strong><u>El libro ha sido introducido correctamente, gracias.</u></strong></td>
  </tr>
</table>
<table width="390" border="0">
  <tr>
    <td width="384">¿Que desea hacer?</td>
  </tr>
</table>
<table width="317" border="1">
  <tr>
    <td width="145" align="center"><strong>Ir a inicio</strong></td>
    <td width="162" align="center" valign="bottom">'
);
echo
"<a href=\"javascript:history.back()\" ><strong>Introducir otro libro</strong></a></td>
  </tr>
</table>
"
;





}else{
    echo 
"<b>Error:</b> El libro introducido ya existe en nuestra base de datos, por favor introduzca otro ";
    echo 
"<a href=\"javascript:history.back()\">Regresar</a>";
}?
sobre lo de null quedaria así¿no?
Código PHP:
$sql "insert into libros values ('$titulo','$editorial','$isbn','$precio')";
$sql2 ="insert into autores values ('$last_id','$autor')"
gracias
  #6 (permalink)  
Antiguo 12/09/2009, 15:21
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Obtener valor de un campo

Lo mas practico seria relacionar tus 2 tablas usando INNODB y generar claves foraneas.
Sinembargo, revisa en este enlace el comentario de turco_7
http://www.forosdelweb.com/f86/faqs-mysql-489891/
Tambien puedes utilizar la funcion LAST_INSERT_ID() para obtener el id generado en la consulta anterior e insertarlo en tu nueva consulta. Logicamente el campo id de autores ya no deberia ser autonumerico ya que tu le asignarias el id generado anteriormente.
  #7 (permalink)  
Antiguo 12/09/2009, 15:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

No si el campo id de autores no debe ser autonumerico
  #8 (permalink)  
Antiguo 12/09/2009, 16:07
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Obtener valor de un campo

Si vas a obviar el primer campo, tu consulta deberia indicarlo y quedar asi:
Código:
INSERT INTO autores (campo2,campo3,....campoN) 
VALUES ('valor2','valor3',...'valorN');
  #9 (permalink)  
Antiguo 12/09/2009, 16:11
 
Fecha de Ingreso: abril-2009
Ubicación: Miami
Mensajes: 182
Antigüedad: 15 años
Puntos: 8
Sonrisa Respuesta: Obtener valor de un campo

.. pudieras poner el formato de tus tablas de libros y autores ??? otra cosa, cual es la línea 25 ?? y la 26?? .. otra cosa ... aún sigo sin entender el pq insertas ese NULL en ambas tablas .... en que campos insertas ese NULL ??? en el auto_increment ?? para qué ??? con qué objetivo ????

Hay mas ... las variables id_libro que puse en mi código es "hipotética", debes usar el nombre que use dicha variable en tu tabla [por eso pregunto el formato de tus tablas con sus campos]

.. por último, pienso que tu INSERT debe ser de esta forma:
insert into libros(titulo) values ('$titulo') ...
__________________
-----------------------------------
Éxitos !!! .. joao
  #10 (permalink)  
Antiguo 12/09/2009, 16:29
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

autores
Campo Tipo Nulo Predeterminado Comentarios MIME
id_autor int(4) No auto_increment
id_libro int(4) No <-----me gustaria que este valor fuese el del id_libro de la tabla libros
autor varchar(50) No


libros
Campo Tipo Nulo Predeterminado Comentarios MIME
id_libro int(4) No auto_increment
titulo varchar(50) No
editorial varchar(30) No
isbn varchar(20) No
precio int(3) No

Espero que te aclares

Código PHP:
$result mysql_query($sql3$link);//25
$row mysql_fetch_array($result);//26 
el codigo completo esta mas arriba

ahh,por ultimo si no he entendido mal si no pongo null quedaria así
Código PHP:
$sql "insert into libros values ('$titulo','$editorial','$isbn','$precio')";
$sql2 ="insert into autores values ('$last_id','$autor')"
gracias de nuevo y perdonen mi ignorancia

Última edición por Xbio; 12/09/2009 a las 16:40
  #11 (permalink)  
Antiguo 12/09/2009, 16:36
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Obtener valor de un campo

Porque tu campo id_libro en una tabla es de extension 4 y en la otra 11?
Te recomendaria crear tus tablas en INNODB y generar la clave foranea id_libro asi te evitas problemas
  #12 (permalink)  
Antiguo 12/09/2009, 16:38
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

se me ha colado eso
y sobre eso que dices no tengo nidea de lo que es.
  #13 (permalink)  
Antiguo 12/09/2009, 17:58
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Obtener valor de un campo

Prueba con esto:

Cita:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `autores`
--

CREATE TABLE IF NOT EXISTS `autores` (
`id_autor` int(4) NOT NULL auto_increment,
`id_libro` int(4) NOT NULL,
`autor` varchar(50) NOT NULL,
PRIMARY KEY USING BTREE (`id_autor`,`id_libro`),
KEY `FK_autores_1` (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `libros`
--

CREATE TABLE IF NOT EXISTS `libros` (
`id_libro` int(4) NOT NULL auto_increment,
`titulo` varchar(50) NOT NULL,
`editorial` varchar(30) NOT NULL,
`isbn` varchar(20) NOT NULL,
`precio` int(3) NOT NULL,
PRIMARY KEY (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `autores`
--
ALTER TABLE `autores`
ADD CONSTRAINT `FK_autores_1` FOREIGN KEY (`id_libro`) REFERENCES `libros` (`id_libro`);

--
-- Crear SP
--
CREATE DEFINER=`mibd`@`%` PROCEDURE `sp_ins_informacion`( #Aqui debes cambiar mibd por el nombre de tu Base de datos
IN _titulo VARCHAR(50),
IN _editorial VARCHAR(30),
IN _isbn VARCHAR(20),
IN _precio INT(3),
IN _autor VARCHAR(50)
)
BEGIN
DECLARE id INT;
SET AUTOCOMMIT=0;
START TRANSACTION;

INSERT INTO libros(titulo,editorial,isbn,precio) VALUES (_titulo,_editorial,_isbn,_precio);

SET id = LAST_INSERT_ID();
IF id > 0 THEN
INSERT INTO autores(id_libro,autor) VALUES (id,_autor);
COMMIT;
ELSE
ROLLBACK;
END IF;
END
Luego lo llamas desde tu consulta asi:
Cita:
CALL sp_ins_informacion ('miTitulo','miEditorial','miISBN','35','miAutor') ;
  #14 (permalink)  
Antiguo 13/09/2009, 04:44
 
Fecha de Ingreso: septiembre-2009
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de un campo

Lo demas me deja introducirlo bien pero a partir de Crear SP, me dice que hay error de sintaxis
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7
y la linia 7 hay esto:

Código:
IN _autor VARCHAR(50)#linia 6
)#linia 7
BEGIN#linia 8 
Sobre lo de null, si lo quito me sale esto: Column count doesn't match value count at row 1


He probado utlizando mysql_insert_id y cuando lo muestro con echo si me sale, pero al insertar la variable en el sql me sale 0

Esto es como queda:
$ultimo_id = mysql_insert_id($connectid);

Y donde lo pongo mas arriba:
$sql2 ="insert into autores) values (null,'$ultimo_id','$autor')";

PD: creo que esto no es necesario ya que lo queria por si un libro tenia dos o mas autores, pero como en el formulario lo unifico todo...

Última edición por Xbio; 13/09/2009 a las 05:30
  #15 (permalink)  
Antiguo 13/09/2009, 13:17
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Obtener valor de un campo

CREATE DEFINER=`mibd`@`%` PROCEDURE `sp_ins_informacion`(
IN _titulo VARCHAR(50),
IN _editorial VARCHAR(30),
IN _isbn VARCHAR(20),
IN _precio INT(3),
IN _autor VARCHAR(50)
)
BEGIN
DECLARE id INT;
SET AUTOCOMMIT=0;
START TRANSACTION;

INSERT INTO libros(titulo,editorial,isbn,precio) VALUES (_titulo,_editorial,_isbn,_precio);

SET id = LAST_INSERT_ID();
IF id > 0 THEN
INSERT INTO autores(id_libro,autor) VALUES (id,_autor);
COMMIT;
ELSE
ROLLBACK;
END IF;
END
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 17:26.