Comunidad de diseño web y desarrollo en internet online

Nuevisimo en esto del PHP y MySQL

Citar            
MensajeEscrito el 07 Oct 2009 11:08 pm
Hola muy buenas a todos, como digo en el titulo soy nuevo en esto de las bases de datos. Os expongo mi caso a ver si me podeis ayudar (seguro que si jeje): tengo unos archivos en Excel y tengo que crear con ellos una base de datos. Los campos que tengo en esos Excel son: Nombre, Apellido, Dirección, DNI, Teléfono, Nº de Cuenta Bancaria, Departamento, Nº de Empleado, Nombre del Curso Impartido, Nº Horas Impartidas, Fecha Imparticion (11 entradas en total).
Como veis son datos personales de profesores y los cursos y horas impartidas por esos profesores. Lo que tengo que conseguir es lo siguiente: al buscar un profesor, me tiene que devolver cuantas horas de cada curso ha hecho (Nombre del curso impartido) en total e igualmente si busco por Departamentos. Estoy realmente perdido. Si alguien me puede hechar una mano le estare eternamente agradecido jeje. ¿Como empiezo?, ¿cuantas tablas debería crear? y como las relaciono. Bueno ante muchas gracias. Un saludo

Por hullabaloo

0 de clabLevel



 

safari
Citar            
MensajeEscrito el 07 Oct 2009 11:56 pm
Te recomiendo leer tutoriales relacionado con el tema:

http://www.cristalab.com/tutoriales/tutorial-basico-de-bases-de-datos-c75l/
ó
http://www.webtaller.com/codigo/Clicks.php/540/lenguajes/

Aca en lo que te podemos ayudar es en consultas puntuales.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie8
Citar            
MensajeEscrito el 08 Oct 2009 04:03 am
tienes que hacer 3 tablas una para los cursos otra para los profesores y otra para asignarles a los profesores los cursos y las horas.
eJ: tablas asignaprofesorescursos, cursos, profesor.

la tabla de Departamentos no te entendi?? :?
el codigo en mysql seria asi:


-- phpMyAdmin SQL Dump
-- version 2.11.5
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 10-10-2009 a las 12:07:50
-- Versión del servidor: 5.0.51
-- Versión de PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `profesores`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `asignaprofesorescursos`
--

CREATE TABLE `asignaprofesorescursos` (
`codeasigna` int(12) NOT NULL auto_increment,
`nempleado` varchar(12) collate latin1_general_ci NOT NULL,
`codcurso` varchar(12) collate latin1_general_ci NOT NULL,
`nhoras` int(11) NOT NULL,
`fechaimportacion` date NOT NULL,
PRIMARY KEY (`codeasigna`),
KEY `nempleado` (`nempleado`),
KEY `codcurso` (`codcurso`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ;

--
-- Volcar la base de datos para la tabla `asignaprofesorescursos`
--

INSERT INTO `asignaprofesorescursos` (`codeasigna`, `nempleado`, `codcurso`, `nhoras`, `fechaimportacion`) VALUES
(1, '1454', '01', 5, '2009-10-10'),
(2, '1454', '02', 5, '2009-10-10'),
(3, '1454', '03', 5, '2009-10-10'),
(4, '1454', '03', 5, '2009-10-07'),
(5, '1455', '01', 10, '2009-10-07'),
(6, '1455', '02', 10, '2009-10-08');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cursos`
--

CREATE TABLE `cursos` (
`codcurso` varchar(12) character set latin1 collate latin1_general_ci NOT NULL,
`nomcurso` varchar(30) character set latin1 collate latin1_general_ci NOT NULL,
PRIMARY KEY (`codcurso`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `cursos`
--

INSERT INTO `cursos` (`codcurso`, `nomcurso`) VALUES
('01', 'Logica de Programacio1'),
('02', 'Logica de Programacio2'),
('03', 'Base de datos1'),
('04', 'Base de datos2');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `profesor`
--

CREATE TABLE `profesor` (
`n_empleado` varchar(12) collate latin1_general_ci NOT NULL COMMENT 'codigo del profesor',
`nombres` varchar(30) collate latin1_general_ci NOT NULL,
`apellidos` varchar(30) collate latin1_general_ci NOT NULL,
`direccion` varchar(40) collate latin1_general_ci NOT NULL,
`dni` varchar(25) collate latin1_general_ci NOT NULL,
`telefono` varchar(25) collate latin1_general_ci NOT NULL,
`n_cuentabancaria` varchar(30) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`n_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='tabla de profesores';

--
-- Volcar la base de datos para la tabla `profesor`
--

INSERT INTO `profesor` (`n_empleado`, `nombres`, `apellidos`, `direccion`, `dni`, `telefono`, `n_cuentabancaria`) VALUES
('1454', 'Luis ', 'Perez Rico', 'cra 24 n 2-14', 'no se que es dni', '987456', '546987lk12'),
('1455', 'Mauricio', 'Mantinez', 'cra 24 n 2-14 palma de mollorca', 'no se que es dni', '569874', '546987lk2365');

--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `asignaprofesorescursos`
--
ALTER TABLE `asignaprofesorescursos`
ADD CONSTRAINT `asignaprofesorescursos_ibfk_2` FOREIGN KEY (`codcurso`) REFERENCES `cursos` (`codcurso`),
ADD CONSTRAINT `asignaprofesorescursos_ibfk_1` FOREIGN KEY (`nempleado`) REFERENCES `profesor` (`n_empleado`);



y la consulta en mysql asi:



SELECT profesor.nombres, cursos.nomcurso, asignaprofesorescursos.nhoras, sum( asignaprofesorescursos.nhoras )
FROM asignaprofesorescursos, cursos, profesor
WHERE cursos.codcurso = asignaprofesorescursos.codcurso
AND profesor.n_empleado = asignaprofesorescursos.nempleado
AND asignaprofesorescursos.nempleado = '1454'
GROUP BY cursos.nomcurso
LIMIT 0 , 30


si puedo ayudarte mas no dudes en preguntar

:cool:

Por crmauricio

52 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Oct 2009 03:10 pm
Crmauricio, te recomiendo que para unir tablas utilices "(LEF|INNER|RIGHT) JOIN" y una aclaracion declaraste FOREIGN KEY para que esto funcionen las tablas deben ser InnoDB, entre otras condiciones.-

Saludos

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie8
Citar            
MensajeEscrito el 14 Oct 2009 01:38 pm
Gracias york3s por tu aclaración las tablas como lo puedes ver son de tipo innodb por lo de integridad referecial y la consulta es muy sencilla paa que complicarnos?, pero aplicare tus buenos consejos. :cool:

Por crmauricio

52 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Oct 2009 02:48 pm
crmauricio no es complicarse la vida, es el deber ser... Te doy las razones:

  • FOREIGN KEY es para mantener la integridad referencial, sin eso la base de datos no haces buena implementación de una base de datos.
  • Usar JOIN explicitos (LEFT, RIGHT, INNER, etc.) le dices al analizador del query el orden en que debe revisar las tablas, de la forma implicita (FROM table1, table2, table3) lo dejas a su criterio.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.