AYUDA CON QUERY - TABLAS RELACIONADAS

#1
Hola bakunos, tengan buen día. (TEMA EDITADO)

Tengo las siguientes tablas:

CREATE TABLE alumno (
id VARCHAR (11) NOT NULL,
nomAlumno VARCHAR (25) NOT NULL,
apPatAlumno VARCHAR (25) NOT NULL,
apMatAlumno VARCHAR (25) NOT NULL,
grado INT (1) NOT NULL,
grupo VARCHAR (1) NOT NULL,
taller VARCHAR (25) NOT NULL,
edad INT (2) NOT NULL,
sexo VARCHAR (1) NOT NULL,
email VARCHAR (50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE tutor (
alumno_id VARCHAR (11) NOT NULL,
nomTutor VARCHAR (25) NOT NULL,
apPatTutor VARCHAR (25) NOT NULL,
apMatTutor VARCHAR (25) NOT NULL,
direccion VARCHAR (160) NOT NULL,
telMovil INT (10) NOT NULL,
telCasa INT (7) NOT NULL,
INDEX (alumno_id),
FOREIGN KEY (alumno_id)
REFERENCES alumno (id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB;

Anteriormente podía hacer el INSERT en ambas tablas pero ahora ya no porque hice unas modificaciones en las PK y FK.

Esta es la query que utilizo:

PHP:
$id = $_POST["id"];
$nomAlumno = $_POST["nomAlumno"];
$apPatAlumno = $_POST["apPatAlumno"];
$apMatAlumno = $_POST["apMatAlumno"];
$grado = $_POST["grado"];
$grupo = $_POST["grupo"];
$taller = $_POST["taller"];
$edad = $_POST["edad"];
$sexo = $_POST["sexo"];
$email = $_POST["email"];
$nomTutor = $_POST["nomTutor"];
$apPatTutor = $_POST["apPatTutor"];
$apMatTutor = $_POST["apMatTutor"];
$direccion = $_POST["direccion"];
$telMovil = $_POST["telMovil"];
$telCasa = $_POST["telCasa"];

$queryAlumno = "INSERT INTO alumno (id, nomAlumno, apPatAlumno, apMatAlumno, grado, grupo, taller, edad, sexo, email) VALUES ('$id','$nomAlumno', '$apPatAlumno', '$apMatAlumno', $grado, '$grupo', '$taller', $edad, '$sexo', '$email')";
$insert = mysql_query($queryAlumno, $con) or die (mysql_error());
$idCabecera = mysql_insert_id();

$queryTutor = "INSERT INTO tutor (alumno_id, nomTutor, apPatTutor, apMatTutor, direccion, telMovil, telCasa) VALUES ('$idCabecera', '$nomTutor', '$apPatTutor', '$apMatTutor', '$direccion', $telMovil, $telCasa)";
$insert = mysql_query($queryTutor, $con) or die (mysql_error());
El error que me manda es el siguiente:

Cannot add or update a child row: a foreign key constraint fails (`sicalumnos`.`tutor`, CONSTRAINT `tutor_ibfk_1` FOREIGN KEY (`alumno_id`) REFERENCES `alumno` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

Ya le he modificado en la varias ocasiones pero no encuentro la solución. Espero me puedan ayudar.


Gracias por leer!:vientos:
 
#2
tu consulta es correcta, solo que te muestra todos los registros.

para consultar uno solo agrégale al final una condición con WHERE por ejemplo:

$queryAlum = "SELECT alumno.nomAlumno, alumno.apPatAlumno, alumno.apMatAlumno, alumno.matricula, alumno.grado, alumno.grupo, alumno.taller, alumno.edad, alumno.sexo, alumno.email, tutor.nomTutor, tutor.apPatTutor, tutor.apMatTutor, tutor.direccion, tutor.telMovil, tutor.telCasa FROM alumno left join tutor on alumno.id = tutor.alumno_id WHERE alumno.matricula='123456789' ";

y pero como debe ser dinámico hazlo de esa manera:

$matricula='123456789';


$queryAlum = "SELECT alumno.nomAlumno, alumno.apPatAlumno, alumno.apMatAlumno, alumno.matricula, alumno.grado, alumno.grupo, alumno.taller, alumno.edad, alumno.sexo, alumno.email, tutor.nomTutor, tutor.apPatTutor, tutor.apMatTutor, tutor.direccion, tutor.telMovil, tutor.telCasa FROM alumno left join tutor on alumno.id = tutor.alumno_id WHERE alumno.matricula='$matricula' ";
 

amic_182

Bovino adicto
#4
Lo que te contestaron arriba debería funcionar, sin embargo yo tengo una pregunta para ti.

Porque tienes una columna ID en la tabla de alumnos, si la matrícula puede funcionar como PK ?
 
#6
La pregunta que me haces, es la misma que me hice antes de abrir este tema. Usaré la matricula como PK. Gracias amic_182! Dos cabezas piensan mejor que una :)
 
#7
Amigo me manda el siguiente error al hacer mi búsqueda:

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 1
 

greyess74

Bovino maduro
#8
El problema de tu consulta inicial es que mysql_insert_id() capta el último registro AUTO_INCREMENT más reciente generado, lo cual no sucede, ya que por la descripción de tus tablas, no existe ningún campo que se autoincremente, lo que yo sugiero es que asignes directamente la id del alumno al campo alumno_id de la tabla tutor
 
Arriba