Ir al contenido



Foto

Insertar en tabla varios a varios sin repetir


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 428 mensajes

Escrito 15 noviembre 2018 - 07:12

Queria preguntarles cual es la forma correcta de insertar en una tabla varios a varios sin repetir, deberia usar un procedimiento almacenado o como hacerlo mediante consultas(trabajo con php).

 

Explico: estoy haciendo un sistema para una cervezeria que vende vasos a granel que llenan desde un barril. y el sistema debe ser dinamico por si algun dia hay alguna medida nueva de vaso para venta. o si hay un nuevo barril con un nuevo tipo de cerveza:

Es decir los barriles los reutilizan, por eso el precio va asociado al producto y no al barril.

 

Tengo

BARRILES (#idbarril,idproducto, activo,etc..)

MEDIDAS(#idmedida,descripcion,capacidad)

PRECIOSGRANEL(#ID, idmedida,idproducto,precio)

 

Como veran los precios los tengo en precios granel, que tiene para cada medida de cada producto un precio.

Pero como dije el sistema tiene que ser dinamico entonces en el proceso de insertar una medida, debo insertar la relacion obviamente, pero no debo repetir el registro:


php
  1. public function guardarMedida($nombre,$mm){
  2.  
  3. try
  4. {
  5. $conexion=Conexion::singleton_conexion();
  6. $conexion->beginTransaction();
  7. $sql = "INSERT INTO medidas (idmedida,capacidad,descripcion)";
  8. $sql.=" VALUES (null,'".$mm."','".$nombre."');";
  9.  
  10. $conexion->query($sql);
  11. $lb="SELECT * FROM barriles left join producto on barriles.idprod=producto.idproducto";
  12. $arraylb=$conexion->query($lb);
  13. foreach ($arraylb as $ba){
  14. $idp=$ba['idproducto'];
  15.  
  16.  
  17. $insert="INSERT INTO preciosgranel(idpg,idprod,idmedida,precio)";
  18. $insert.=" VALUES(null,".$idp.",".$idmedida.",0)";
  19.  
  20. }
  21. $conexion->commit();
  22.  
  23. } catch (Exception $e)
  24. {
  25. die($e->getMessage());
  26. $conexion->rollBack();
  27. }
  28. }
  29. }

Es decir el codigo de arriba, si tengo producto1 y medida1 y 2 y quiero insertar una tercera medida me va a guardar para el 1 el 1 y2 de vuelta.

 

Como puedo solucionar este problema?


  • 0