Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/02/2011, 02:08
Avatar de nquerce
nquerce
 
Fecha de Ingreso: febrero-2011
Ubicación: Buenos Aires - Argentina
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta IF EXISTS, ALERT, ELSE INSERT -- Como Hago??

Hola. Soy nuevo en el foro y novato en esto de php y mysql. Ademas comento que para generar aplicaciones, me apoyo bastante en dreamweaver ya que me cuesta mucho crear funciones desde cero, y con las que viene prediseñadas mas mucha lectura y un poco de "toqueteo" logro hacer que me sirvan para lo que necesito.

Ahora bien, me tope con algo que es tan complejo para mi que hasta me cuesta plantearmelo logicamnte para depsues abordarlo desde el codigo.

Les comento el escenario:

Tengo tres tablas:
Padron: un listado de empresas
Empleados: un listado de empleados de todas las empresas conun campo id_empresa que dierencia a que empresa pertenecen.
DDJJ: un listado igual al listado de empleados, pero con 2 campos mas (mes y año) donde guardo las declaraciones juradas de la nomina de empleados que cada empresa debe realizar mensualmente.

Y un select: que selecciona de la lista de empleados todos los que pertenecen a una empresa ne particular y que ademas estan marcados como activos. (los marco como activo o inactivo para no deletearlos de la base y no perder el registro) que me rellena una tabla dinamica que es una pagina.php con el maestro de los datos.

Para mejor ilustrar:

Tabla padron:
Código:
CREATE  TABLE  `proyecto`.`padron` (  `id_empresa` int( 6  )  NOT  NULL  auto_increment ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `ingbrutos` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `rsocial` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `calle_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `nro_fiscal` varchar( 6  )  collate utf8_unicode_ci NOT  NULL ,
 `piso_fiscal` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `dto_fiscal` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 `prov_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `ciudad_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `cp_fiscal` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `calle_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `nro_laboral` varchar( 6  )  collate utf8_unicode_ci NOT  NULL ,
 `piso_laboral` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `dto_laboral` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 `prov_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `ciudad_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `cp_laboral` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `telef1` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `telef2` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `fax` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `email1` varchar( 40  )  collate utf8_unicode_ci NOT  NULL ,
 `email2` varchar( 40  )  collate utf8_unicode_ci NOT  NULL ,
 `dia_fechaini` int( 2  )  NOT  NULL ,
 `mes_fechaini` int( 2  )  NOT  NULL ,
 `anio_fechaini` int( 4  )  NOT  NULL ,
 `nombre_contacto` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_contacto` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `tratamiento` varchar( 15  )  collate utf8_unicode_ci NOT  NULL ,
 `usuario` varchar( 16  )  collate utf8_unicode_ci NOT  NULL ,
 `password` varchar( 32  )  collate utf8_unicode_ci NOT  NULL ,
 `nivel` varchar( 16  )  collate utf8_unicode_ci NOT  NULL default  'empresa',
 PRIMARY  KEY (  `id_empresa`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
Tabla empleados:
Código:
 CREATE  TABLE  `proyecto`.`empleados` (  `id_empl` int( 8  )  NOT  NULL  auto_increment ,
 `id_empresa` int( 6  )  NOT  NULL ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `cuil_prefijo` int( 2  )  NOT  NULL ,
 `cuil_dni` int( 8  )  NOT  NULL ,
 `cuil_subfijo` int( 1  )  NOT  NULL ,
 `nombre_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `diaalta_empl` int( 2  )  NOT  NULL ,
 `meslta_empl` int( 2  )  NOT  NULL ,
 `anioalta_empl` int( 4  )  NOT  NULL ,
 `convenio_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `categoria_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo_empl` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo_cent_empl` varchar( 2  )  collate utf8_unicode_ci NOT  NULL default  '00',
 `activo` varchar( 10  )  collate utf8_unicode_ci NOT  NULL default  'Inactivo',
 PRIMARY  KEY (  `id_empl`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
Tabla ddjj:
Código:
CREATE  TABLE  `proyecto`.`ddjj` (  `id_ddjj` int( 10  )  NOT  NULL  auto_increment ,
 `id_empl` int( 8  )  NOT  NULL ,
 `id_empresa` int( 6  )  NOT  NULL ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `cuil_prefijo` int( 2  )  NOT  NULL ,
 `cuil_dni` int( 8  )  NOT  NULL ,
 `cuil_subfijo` int( 1  )  NOT  NULL ,
 `nombre_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `diaalta_empl` int( 2  )  NOT  NULL ,
 `meslta_empl` int( 2  )  NOT  NULL ,
 `anioalta_empl` int( 4  )  NOT  NULL ,
 `convenio_empl` varchar( 16  )  collate utf8_unicode_ci NOT  NULL ,
 `categoria_empl` varchar( 32  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo__empl` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `mes_ddjj` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `anio_ddjj` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 PRIMARY  KEY (  `id_ddjj`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
El select:
Código:
SELECT *
FROM empleados
WHERE id_empresa = $_SESSION['MM_id_empresa'] AND activo='Activo'
La pagina maestro.php tiene una tabla dinamica que muestra el recordset y un form con 2 textinput (mes, año) y boton enviar.

Hasta aca llegue con la ayuda de dreamweaver y leyendo foros, faq's, y los manuales de MYSQL.

Pero estoy trabado en lo siguiente:

Necesito que cuando el usuario apriete el boton enviar del formulario el resultado del select de la tabla empleados (el mismo que me genera la tabla dinamica del maestro.php) se grabe a la tabla ddjj agregando mes y año ingresado en el form a cada registro.

Esto verificando previamente que esa empresa no haya realizado ya una daclaracion jurada para el mismo mes y mismo año, o sea pafra ese mismo periodo mensual.

Se me ocurren dos opciones:

1ra) IF EXISTS (hacer el mismo select agregando al WHERE año_ddjj=$_post['año_ddjj'] AND mes_ddjj=$_post['mes_ddjj'] pero desde la tabla ddjj)

SI VERDADERO emitir un alert indicando que ya se hizo la declaracion jurada por supuesto sin grabar nada en la tabla ddjj,

SI FALSO (hacer el INSERT INTO correspondiente, agregando los campos mes_ddjj y anio_ddjj a cada registro insertado).

2da) (hacer el mismo select agregando al WHERE año_ddjj=$_post['año_ddjj'] AND mes_ddjj=$_post['mes_ddjj'] pero desde la tabla ddjj) y

si el recuento de rows del resultado es =0, hacer el INSERT INTO correspodiente, agregando los campos mes_ddjj y anio_ddjj a cada registro insertado,

y si no mostrar el alert con el mensaje de error

(Esta opcion me parece que no recarga tanto al servidor donde corre la aplicacion).

Como el caso es muy puntual y muy particular, no encuentro en dreamweaver ninguna funcion prediseñada que pueda "toquetear" para poder hacer esto.

Ademas leyendo y googleando, lo mas cercano que encontre es "IF EXISTS UPDATE ELSE INSERT", pero yo no quiero updatear ni insertar nada si es que ya se hizo la DDJJ anteriormente.

Perdon por lo extenso, pero creo que cuando mas claro sea y mas datos aporte, tango mas probabilidades de obtener una buena respuesta.

Gracias de antemano.

Última edición por nquerce; 06/02/2011 a las 01:11 Razón: Ampliar info