entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

query en sql

**Tabla proveedor

id_proveedor / nom_prov
      1      /  Fender
      2      /  gibson

Tabla PRODUCTOS

id_producto / nom_prod / id_proveedor / id_proveedor2
    2      /  guitarra /       1 

como puedo hacer para que yo al agregar otro proveedor(gibson) a el producto guitarras y me quede asi

id_producto / nom_prod / id_proveedor / id_proveedor2
    2       / guitarra /       1    /           2

para que no hacer una reinsercion y se me duplique el producto guiutarra y me genere otro id**

1 Respuesta

1voto

white Puntos75880

Que tal si agregas otra tabla a tu base de datos? Llamemosla productos_proovedores con la estructura:

 id_producto / id_proveedor
    (INT)         (INT)

asi mantienes una relacion de los productos con los proovedores.

Por otra parte lo que quieres hacer es mas complicado, primero necesitas hacer una consulta verificando si existe un producto con un proovedor y luego hacer un insert o un update, si haces lo que te propongo te evitaras esto

0voto

erick comentado

si de echo tenia pensado eso, pero como le agregaria los datos a esa tabla? tambien eso no comprendo

0voto

white comentado

estamos hablando de algun lenguaje de programación en conjunto con sql server?

0voto

erick comentado

asi es estoy con PDO PHP y sqlserver
asi inserto el producto
$insert = $this->conexion->prepare("INSERT INTO productos VALUES(:producto,:id_proveedor,:id_maquina) ");
y asi el priveedor
$insert = $this->conexion->prepare("INSERT INTO proveedores VALUES(:nom_prov)");

0voto

white comentado

haz una consulta a la tabla productos despues de insertar el producto.

$select = $this->conexion->prepare("SELECT id_producto, id_proveedor
                                    FROM productos WHERE id_producto = ?");
$select->execute(array($producto_id));
$result = $select->fetch(PDO::FETCH_ASSOC);
var_dump($result); // aca tenemos id_producto e id_proveedor

donde $producto_id contiene el id del producto que insertas, podrias tambien usar el metodo PDO::lastInsertId() y asi obtendrias el id del producto. Tu columna id_producto esta como Identity ("autoincrement")?.

0voto

erick comentado

si asi es el id_producto es autoincrement,
entoneces el resultado de ese select lo inserto en la tabla productos_proovedores

0voto

white comentado

podías intentar de esta forma:

$insert = $this->conexion->prepare("INSERT INTO productos VALUES(:producto,:idproveedor,:idmaquina) ");

// ...

$id_producto = $insert->lastInsertId();

$select = $this->conexion->prepare("SELECT id_proveedor
                                    FROM productos WHERE id_producto = ?");
$select->execute(array($producto_id));
$result = $select->fetch(PDO::FETCH_ASSOC);
$id_proveedor = $result['id_proveedor'];

$insert2 = $this->conexion->prepare("INSERT INTO productos_proveedores
                                    VALUES(:id_producto,:id_proveedor)");
$insert2->execute(array(
    ':id_producto' => $id_producto,
    ':id_proveedor' => $id_proveedor
));

0voto

erick comentado

ahh ok ya comprendo ok todo esto dentro de el metodo que utilizo verdad
ya que en este metodo tenia mi codigo que te pase antes, entonces quedaria asi con el que me pasaste??

public funtion InserProd()
{
$insert = $this->conexion->prepare("INSERT INTO productos VALUES(:producto,:idproveedor,:idmaquina) ");

// ...

$id_producto = $insert->lastInsertId();

$select = $this->conexion->prepare("SELECT id_proveedor
                                    FROM productos WHERE id_producto = ?");
$select->execute(array($producto_id));
$result = $select->fetch(PDO::FETCH_ASSOC);
$id_proveedor = $result['id_proveedor'];

$insert2 = $this->conexion->prepare("INSERT INTO productos_proveedores
                                    VALUES(:id_producto,:id_proveedor)");
$insert2->execute(array(
    ':id_producto' => $id_producto,
    ':id_proveedor' => $id_proveedor
));
}

0voto

white comentado

asegurate de cambiar la linea:

// ...

por el codigo que ejecuta tu consulta ( $insert->execute() )

0voto

erick comentado

si asi hermano solo una ultima pregunta!! como lo validaria si deciden meter el mismo nombre de producto?? y que no se re inserte??
$insert = $this->conexion->prepare("INSERT INTO productos VALUES(:producto,:idproveedor,:idmaquina) ");
por que en eesta linea si lo acepta!
o tendria que checar si el nombre existe y si existe lo igualo a null o como??

0voto

white comentado

define el campo que contiene el nombre del producto con una restriccion UNIQUE,

ALTER  TABLE  productos WITH CHECK 
ADD CONSTRAINT UQ_productos_nom_prod UNIQUE (nom_prod)

aca definimos la columna nom_prod como UNIQUE

si tu intension es mostrar al usuario que ya existe un producto con ese nombre puedes realizar una consulta verificando si el nombre existe en la tabla.

https://msdn.microsoft.com/es-ec/library/ms190024.aspx

0voto

erick comentado

asi es de echo de la tabla producto el id_producto lo tengo unique y auto increment
ah ok el nom_prod = producto(nombre del producto).

0voto

erick comentado

asi es de echo de la tabla producto el id_producto lo tengo unique y auto increment
ah ok el nom_prod = producto(nombre del producto).

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta