Error con llave externa

Buenas tardes canipotti tengo dos tablas:

create table paciente(
idpaciente int auto_increment not null primary key,
nombre varchar(20),
apellidos varchar(20));

create table cita(
idcita int auto_increment not null primary key,
fecha varchar(20),
hora(20)),

idpaciente int)

me gustaría saber si existe alguna posibilidad sólo desde mysql que cuando registre alguna de los campos de la tabla cita se actualice el idpaciente con el idpaciente de la tabla paciente. He intentado poner paciente,idpaciente como llave externa de la clave principal de paciente,idpaciente pero me da error.

Gracias de antemano

1 respuesta

Respuesta
1

Creo entender que te refieres a lo siguiente:

Que cuando insertes una nueva cita en la tabla de Citas, el campo de "citas" que contiene el idpaciente (citas. Idpaciente) tome el ID del paciente que la ha solicitado.

En este caso MySQL necesita que le suministres el IDPaciente, ya que no hay ninguna regla ni mecanismos preestablecidos que permitan saber qué paciente solicitó la cita.

Ejemplo:

(Antes que nada: para fecha te recomendaría el tipo DATE en lugar de VARCHAR, aunque podría suceder que no te interese hacer operaciones con las fechas (como ordenar cronológicamente o calcular plazos) y en cambio quieras permitir poner algo como "A convenir" en lugar de la fecha. En ese caso un VARCHAR será mejor.)

Supongamos una cita para el 20-03-2012 a las 15:00 horas, para el paciente Nro 14.

El SQL sería:

INSERT INTO citas (idcita, fecha, hora, idpaciente) VALUES (null,'2012-03-20','15:00','14');

El '14', que creo es lo que te interesa, debes averiguarlo de algún modo, hay varias maneras, desde pedir que se tipee el ID hasta permitir elegir entre nombres de pacientes, pero en la sentencia INSERT debes enviar el '14'. No hay reglas, ni procedimientos ni nada que permita a MySQL, en este caso, saber cuál es el paciente.

A modo de curiosidad teórica te puedo comentar un caso donde podría automatizarse: que en lugar del paciente fuera el médico el que quieres insertar su ID, y que hubiera un médico diferente cada día de la semana. En ese caso, teniendo una tabla indicando qué médico atiende cada día, es posible crear una consulta que automáticamente coloque el ID del médico, basándose en la fecha de la cita que estás insertando. Pero eso es porque hay "algo" preestablecido (días que atiende cada médico, en una tabla). Los pacientes son algo muy distinto, obviamente.

Si no he comprendido bien la pregunta, te pido que la reformules.

Creo que lo entendido, pero si creo un formulario con php donde registre todas las citas con:

create table paciente(
idpaciente int auto_increment primary key,
nombre varchar(20),
apellidos varchar(20));

create table cita(

idcita int auto increment primary key,
nombre varchar(20),
apellidos varchar(20),
fecha date,
hora time,

idpaciente int);

nombre y apellido son campos de las dos tablas.Las relaciono de tal modo que si al rellenar cada cita, los campos nombre y apellido si no están registrados ya los cree en paciente y si lo están le de a la cita su idpaciente.

jajajja no se si me explico estoy muy pegado en esto pero si hay una forma de hacerlo menos enrrevesada.... explícamelo

gracias

Sergiomu:

Se puede hacer tal como dices.

Te dejo a ti el trabajo de averiguar si un paciente existe o no (recuerda que el nombre y apellido no son muy confiables porque pueden escribirse mal o haber dos personas con el mismo nombre.)

Sin embargo, una vez que decides que hay que insertarlo automáticamente, haces esto:

INSERT INTO paciente ...

SET @nuevoID:=LAST_INSERT_ID()

INSERT INTO cita (citaid, pacienteid, ... ) VALUES (null, @nuevoID, ...)

El primer INSERT crea un nuevo paciente.

La segunda sentencia crea una variable de MySQL (no de PHP) llamada nuevoID que recibe el valor del ID autonumérico que le tocó al paciente. Esto es así porque la función LAST_INSERT_ID() devuelve siempre el autonumérico generado por el último INSERT que se ejecutó.

El segundo INSERT crea la cita y en ID de paciente pone la variable nuevoID.

Creo que esto era finalmente lo que deseabas saber.

Sigue preguntando lo que necesites.

Reitero mi agradecimiento y me gustaría saber si hay algún manual o curso para poder aprender mysql desde 0 pero con su lenguaje y no mediante interfaz gráfica.

Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas