Foros del Web » Programando para Internet » PHP »

Insert o Update???

Estas en el tema de Insert o Update??? en el foro de PHP en Foros del Web. Hola, mi duda es la siguiente. Yo tengo una base de datos y tengo unas paginas que la actualizan. Pues bien, según tenga unos campos ...
  #1 (permalink)  
Antiguo 28/08/2003, 09:28
 
Fecha de Ingreso: julio-2003
Ubicación: Benilloba/Valencia
Mensajes: 69
Antigüedad: 14 años, 4 meses
Puntos: 0
Insert o Update???

Hola, mi duda es la siguiente. Yo tengo una base de datos y tengo unas paginas que la actualizan. Pues bien, según tenga unos campos o no los tenga quiero que haga un "INSERT..." o un "UPDATE...".
Esto dependeria de si en el mismo campo (en la misma fila) existe una zona=$zona y un anyo=$anyo. Si los DOS coinciden quiero que haga un Update, pero si no coinciden lo que quiero es que haga un Insert y inserte esa nueva fila en la que ya tendria la coincidencia de anyo=$anyo y zona=$zona.
Abajo esta ya el codigo hecho, solo falta saber como poner un IF (esto es lo que no se) para que se ejecute una cosa o la otra.
Un ejemplo de la BD seria:

anyo zona ....
2003 valencia blablabla
2003 madrid blablabla
2004 valencia blablabla

Pues segun el ejemplo, si en la pagina anterior escojo anyo=2003 y zona=valencia quiero que haga un Update. Pero si lo que escojo es anyo=2004 y zona=madrid, como este campo no existe quiero que haga un Insert.

Espero haberme explicado bien. Como lo puedo hacer?? Muchas gracias de antemano.

Esta es la pagina:

<?
//conecto con la base de datos y devuelvo la conexion a $link
include("conex.php");
$link=Conectarse();

//creo la sentencia y la ejecuto


//INSERT

$con_line="Insert Into BD ( anyo, zona, mprecios, mcostes, mnuevos, mnuevoscanales, mfusiones, madquisiciones, mconsecuencias, mtendencias )
Values ( '$anyo', '$zona', '$precios', '$mcostes', '$nuevos', '$cana', '$fusi', '$adqui', '$conse', '$ten')";
$res_line=mysql_query($con_line,$link);


//SELECT

$a_precios = "Update BD Set mprecios ='$precios' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_precios,$link);

$a_costes = "Update BD Set mcostes ='$costes' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_costes,$link);

$a_nuevos = "Update BD Set mnuevos ='$nuevos' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_nuevos,$link);

$a_cana = "Update BD Set mnuevoscanales ='$cana' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_cana,$link);

$a_fusi = "Update BD Set mfusiones ='$fusi' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_fusi,$link);

$a_adqui = "Update BD Set madquisiciones ='$adqui' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_adqui,$link);

$a_conse = "Update BD Set mconsecuencias ='$conse' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_conse,$link);

$a_ten = "Update BD Set mtendencias ='$ten' Where ((anyo='$anyo') AND (zona='$zona'))";
mysql_query($a_ten,$link);

header("Location: mercado.php");
exit;
?>
  #2 (permalink)  
Antiguo 28/08/2003, 15:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Un metodo seria primero hacer un select estilo:

SELECT count(*) as total FROM BD WHERE ((anyo='$anyo') AND (zona='$zona'))

Si total es 0, haces el insert, sino haces el update.

Otro metodo con menos consultas seria hacer el insert, mirar si mysql_query devuelve error de clave ya existente y en ese caso ejecutar el update. Esto solo funcionaria si en la tabla declaras la dupla anyo-zona como clave primaria unica.

Por cierto, el update lo puedes hacer en una sola consulta:

UPDATE BD SET mprecios ='$precios',mcostes ='$costes', ... WHERE ...

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:27.