none
quiero intentar hacer un trigger para actualizar una rela igual al valor maximo del rela + 1 RRS feed

  • Pregunta

  • Estoy armando la pagina de una biblioteca y como veran manejo muchos relas

    Por la forma en que me enseñaron a armar tablas tengo una tabla llamada persona con los siguientes campos

    idpersona int,

    nombre date,

    relasocio int,

    relaautor int,

    Y a la hora de usar el dreamweaver yo inserto en ambas tablas persona y luego socio, pero se como hacer desde php que el valor de rela persona sea el valor que sera el nuevo socio que inserto, por lo que decidi hacer este trigger

    delimiter//
    create trigger sociopersona after INSERT on persona
    for each row BEGIN
    update persona 
    set relasocio = max(relasocio) + 1
    where relasocio =0;
    end;
    //delimiter;


    sin embargo me tira error cuando quiero hacer el insert y eh intentado ya de muchas formas y sin resultado, por lo que quisiera pedir que me ayuden

    viernes, 8 de julio de 2016 23:34

Todas las respuestas

  • harpie_duelist,

    ¿Qué es "rela"? Las relaciones se dan entre tablas en un modelo físico en tanto en un modelo lógico se les llama asociaciones, olvida el termino "rela", no existe.

    ¿Qué intentas representar en la tabla Personas con los campos relaSocio y relaAutor? ¿Intentas representar que una Persona puede ser un Socio y/o un Autor? De ser ese el caso, no es la forma, la manera de lograr esa representación es con la tabla Roles:

    Se entiende que primero debes de insertar los roles: socio, autor, lector, etc, y tras insertar una instancia de persona debes insertar el rol que juega esa persona en tu aplicación (socio, autor, etc.). Nota además que la tabla intermedia [Roles_Persona] (N:M) permite tener una persona con "n" roles y un rol para "n" personas.

    Espero que la información proporcionada te haya sido de utilidad.

    sábado, 9 de julio de 2016 2:00
  • "rela" son claves foraneas, al menos asi me lo enseñaron en la facultad, y ambos id son autonumericos

    lo que quería hacer era insertar ya de una sola vez una persona y un socio, por que sino debo insertar la persona y luego ir a socios para modificar y hacer que esa persona sea socio

    Por eso pense que lo mejor que podía hacer era un trigger que modifique la relación del ultimo registro de la tablapersonas (o todos aquellos cuyo valor sea uno que yo coloque) y que me de como resultado el id del ultimo socio insertado

    sábado, 9 de julio de 2016 2:50
  • harpie_duelist,

    Insisto, no se llama "rela" se llama relación. Te hice la observación en un modelo E-R porque me parece que tienes un problema con el modelamiento de tus tablas.

    Intentando entender tu caso, ¿La tabla Persona es la generalización de las tablas [Socio] y [Autor] (especializaciones)? De ser ese el caso las relaciones no llegan a la tabla Persona, la tabla referenciada es [Persona], fíjate:

    Ahora tras insertar una instancia de Persona puedes insertar un Socio o Autor pasando como valor el ID generado.

    Espero que la información proporcionada te haya sido de utilidad.

    sábado, 9 de julio de 2016 3:19
  • ok, intentare hacerlo de esa forma, de ser asi, cual seria el codigo que debería poner para que me genere el la clave foránea de la tabla persona, ya que al final sigo teniendo el mismo problema, quiero que el idpersona de la tabla socio sea igual al ultimo idpersona que se inserto en la tabla persona
    sábado, 9 de julio de 2016 19:14
  • harpie_duelist,

    Creo que no nos estamos entendiendo. La entidad Persona contiene atributos generales para las entidades Socio y Autor, en tanto las entidades Socio y Autor especializan sus atributos sobre la entidad, por tanto, tu aplicación no persiste instancias de Personas, persiste instancias de Socio o Autor, claro, tras telones tu insertarás los datos correspondientes a cada entidad, si persistes una instancia de Autor entonces guardaras los datos de la persona y luego del autor.

    Lo que corresponde hacer es insertar una instancia de la entidad Persona y luego insertar una instancia de la entidad -por ejemplo- Autor, algo como siguiente:

    /*Insertas datos en la tabla Persona*/
    INSERT INTO Personas (Nombre, Edad) VALUES ('Juan', 10)
    
    /*Recuperas el Id de la persona*/
    SET @IdGenerado = LAST_INSERT_ID()
    
    /*Insertas datos en la tabla Autor*/
    INSERT INTO Autor (idPersona, Desc) VALUES (@IdGenerado, 'Autor')

    Entiendo que en MySql la función LAST_INSERT_ID() recupera el último valor de identidad generado.

    Espero que la información proporcionada te haya sido de utilidad.

    sábado, 9 de julio de 2016 20:20
  • esta, veré como coloco eso en mi archivo php, ya que tengo esto de la siguiente forma, tengo el formulario y luego la secuencia php que me hace el insert

    <form action="ingresarsocio.php" method="post">
    <table>
    <tr>
    <td width="200px"><p>Nombre y Apellido</p></td>
    <td width="500px"><input align="middle" type="text" name="nombreyapellido" width="530" class="easyui-validatebox" required="true"></td>
    </tr>
    <tr>
    <td width="200px"><p>Fecha de nacimiento</p></td>
    <td width="500px"><input  type = "date" name="fechadenacimiento" class="easyui-validatebox" required="true"></td>
    </tr>
    <tr>

    </table>
    </form>

     

    y en el archivo "ingresarsocio" lo tengo asi

    <?php
    include'../conexion1.php';

    mysql_query ("insert into persona (
    nombreyapellido,
    fechadenacimiento)
    value('$_REQUEST[nombreyapellido]',
    '$_REQUEST[fechadenacimiento]');") OR DIE ("SQL INCORRECTO" .mysql_error());
    print "<meta http-equiv=Refresh content=\"2 ; url= controlsocio.php\">"; 
    mysql_close($conexion);

    echo "el registro fue dado de alta";

    ?>


    Eso son solo ejemplos

     
    sábado, 9 de julio de 2016 20:50
  • harpie_duelist,

    Lo siento, ya no puedo acompañarte en la revisión de tu código, no conozco el lenguaje PHP, no podría realizar observaciones o recomendaciones sobre lo que muestras.

    A pesar de que este foro es sobre tecnologías Microsoft es probable que algún colaborador que conozca PHP pueda echarte una mano, caso contrario te sugiero (en caso tengas problemas con PHP) referirte a un foro oficial del lenguaje PHP Forum.

    sábado, 9 de julio de 2016 22:13
  • entonces supongo que no puedo hacer el trigger en mysql para que cuando inserte en socio me de automaticamente el ultimo idpersona que fue insertado.

    Esta bien, gracias por la ayuda

    domingo, 10 de julio de 2016 3:06