Удалять с inner join

Хорошие у меня есть проблема в настоящее время в моем коде, я работаю в системе записи учеников, где представитель может вписывать несколько учеников, но если я удаляю ученик, не хочу, чтобы исчезли данные представителя, которым этот может иметь другого вписанного, одинокого ученика, он исчез бы если и только если уже он не обладает вписанные ученики.

PD: стой ограничивать, что CedulaRepresentanteRef находится в таблице ученики и - чужеземный ключ CedulaRepresentante (Первичный Ключ), помещенного в таблице представитель.

<?php

$Conexion = mysqli_connect("localhost","root","","prueba2") or die ("No se pudo realizar la conexion");


$Registros = mysqli_query($Conexion, "select * from documentos, estatusalumno, padres, alumnos inner join representantes on alumnos.CedulaRepresentanteRef = representantes.CedulaRepresentante where alumnos.CedulaAlumno = '$_REQUEST[CedulaAlumno]'") or die ("Problemas en el select: ".mysqli_error($Conexion));


if ($Reg = mysqli_fetch_array($Registros))
$CedulaRepresentanteRef = $Reg['CedulaRepresentanteRef'];

{
    mysqli_query($Conexion, "delete from alumnos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from estatusalumno where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from padres where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));

    mysqli_query($Conexion, "delete from documentos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'")
    or die ("Problemas en el select: ".mysqli_error($Conexion));



            $Registros2 = mysqli_query($Conexion, "select * from alumnos, representantes") or die 
            ("Problemas en el segundo registro: ".mysqli_error($Conexion));

            $Reg2 = mysqli_fetch_array($Registros2);

            if ($CedulaRepresentanteRef <> $Reg2['CedulaRepresentante']) 

            {
            mysqli_query($Conexion, "delete from representantes where CedulaRepresentante = $CedulaRepresentanteRef")
            or die ("Problemas en el select: ".mysqli_error($Conexion));
            }

            else 

            {
                echo "Se ha eliminado el alumno";
            }
}

else 

{
    echo "No se encontro el alumno";
}   

mysqli_close($Conexion);

  ?>
3
задан 08.06.2016, 02:52
2 ответа

Я обнаруживаю в твоем коде ошибку консультации следующего кода:

$Registros2 = mysqli_query($Conexion, "select * from alumnos, reñpresentantes") or die ("Problemas en el segundo registro: "....

Я думаю, что ты должен менять твой SELECT, потому что ты консультируешь 2 подмостков, не объединяя их... И в момент прошения cedulaRepresentante, так как он не покажет тебе информацию, которую ты занимаешь...

2
ответ дан 24.11.2019, 14:12
  • 1
    echo, если он объединяет их, с этим синтаксисом делай join impl и # 237; я упоминаю . –  Juan Pinzón 08.06.2016, 04:36
  • 2
    Ok, но даже у меня есть ошибка и я это не обнаруживаю. У кого-то есть идея которой быть должным и # 237; чтобы делать? –  shadowmors 08.06.2016, 05:24
  • 3
    @JuanPinz и # 243; n это кажется м и # 225; s cross join, что join impl и # 237; я назначаю встречу. –   08.06.2016, 05:25
  • 4
    @LuiggiMendoza оба не то же самое??, картезианский продукт. stackoverflow.com/questions/3918570/… –  Juan Pinzón 08.06.2016, 05:31
  • 5
    @JuanPinz и # 243; n - то же самое говорить from t1, t2, что from t1 cross join t2, это правильно. Однако, знают как join impl и # 237; я упоминаю решение о типе from t1, t2 where <condición para unir t1 y t2> как join impl и # 237; я назначаю встречу. Правда, которая должна говорить, что from t1, t2 - join impl и # 237; я назначаю встречу он дополнительный и # 241; или и мало использованный. –   08.06.2016, 06:09

если я удаляю ученик, я не хочу, чтобы исчезли данные представителя, которым этот может иметь другого вписанного ученика

Перед тем, как удалять представителя в слепую женщину ты должен проверять, что представитель не был присоединен ни к какому другому ученику. Для этого, ты можешь использовать query, как останься:

//no conozco la estructura correcta de tus tablas, sería bueno
//si mostraras la relación entre alumno y cédula del representante
//o que arregles este query debidamente
$stmt = mysqli_prepare("SELECT COUNT(1) FROM alumnos WHERE CedulaRepresentante = ?");
mysqli_stmt_bind_param($stmt, "s", $CedulaRepresentanteRef);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $alumnosDeRepresentante);
if ($alumnosDeRepresentante === 0) {
    //borrar representante
    //utiliza mysqli apropiadamente, como se muestra en el código previo
    mysqli_query($Conexion, "delete from alumnos where CedulaAlumno = '$_REQUEST[CedulaAlumno]'");
}

Это не часть ответа, но твой код не защищен от атак вставки SQL. Пожалуйста проверь этот вопрос и ответ относительно темы.

0
ответ дан 24.11.2019, 14:12