Procedura Select MySQL mai multe tabele

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
patricia
Mesaje:82

Procedura Select MySQL mai multe tabele

Am niste tabele ca cele de mai jos, si imi trebuie o Procedura sau un Select care sa imi returneze costul medicamentelor unui anumit pacient.
Spre exemplu pacientul cu numele 'DINU MARIA',; si nu prea am idee cum sa fac asta.

Cod: Selectaţi tot

CREATE TABLE medicament(
cod_medicament int primary key,denumire_medicament varchar(50),cantitate_medicament int,pret_unitar float
);
CREATE TABLE pacient(
cnp varchar(14)primary key,nume_pacient varchar(60),adresa varchar(30)
); 
CREATE TABLE boala(
cod_boala int primary key,denumire_boala varchar(50)
);
CREATE TABLE diagnostic(
cnp varchar(14),cod_boala int,cod_medicament int,cantitate_medicament int,
primary key(cnp,cod_boala,cod_medicament)
);

ALTER TABLE diagnostic ADD CONSTRAINT FK_MEDICAMENT foreign key(cod_medicament) REFERENCES medicament(cod_medicament);
ALTER TABLE diagnostic ADD CONSTRAINT FK_PACIENT foreign key(cnp) REFERENCES pacient(cnp);
ALTER TABLE diagnostic ADD CONSTRAINT FK_BOALA foreign key(cod_boala) REFERENCES boala(cod_boala);

ALTER TABLE diagnostic ADD CONSTRAINT FK_MEDICAMENT_STERGERE foreign key(cod_medicament) REFERENCES medicament(cod_medicament)ON DELETE CASCADE;
ALTER TABLE diagnostic ADD CONSTRAINT FK_PACIENT_STERGERE foreign key(cnp) REFERENCES pacient(cnp)ON DELETE CASCADE;
ALTER TABLE diagnostic ADD CONSTRAINT FK_BOALA_STERGERE foreign key(cod_boala) REFERENCES boala(cod_boala) ON DELETE CASCADE;

ALTER TABLE diagnostic ADD CONSTRAINT FK_MEDICAMENT_MODIFICARE foreign key(cod_medicament) REFERENCES medicament(cod_medicament)ON UPDATE CASCADE;
ALTER TABLE diagnostic ADD CONSTRAINT FK_PACIENT_MODIFICARE foreign key(cnp) REFERENCES pacient(cnp)ON UPDATE CASCADE;
ALTER TABLE diagnostic ADD CONSTRAINT FK_BOALA_MODIFICARE foreign key(cod_boala) REFERENCES boala(cod_boala) ON UPDATE CASCADE;

INSERT INTO MEDICAMENT(cod_medicament,denumire_medicament,cantitate_medicament,pret_unitar) values (1,'ZYNAT',900,3);
INSERT INTO MEDICAMENT(cod_medicament,denumire_medicament,cantitate_medicament,pret_unitar) values (2,'AUGUMENTIN',700,3);
INSERT INTO MEDICAMENT(cod_medicament,denumire_medicament,cantitate_medicament,pret_unitar) values (3,'PARASINUS',850,1);
INSERT INTO MEDICAMENT(cod_medicament,denumire_medicament,cantitate_medicament,pret_unitar) values (4,'PANADOL',890,1.2);
INSERT INTO MEDICAMENT(cod_medicament,denumire_medicament,cantitate_medicament,pret_unitar) values (5,'ALGOCALMIN',500,1.5);

INSERT INTO PACIENT(cnp,nume_pacient,adresa) values ('1234567891223','POP ION','CRAIOVA');
INSERT INTO PACIENT(cnp,nume_pacient,adresa) values ('1234567891333','DINU MARIA','CRAIOVA');
INSERT INTO PACIENT(cnp,nume_pacient,adresa) values ('1234567812233','CARSTEA ANCA','MIOVENI');
INSERT INTO PACIENT(cnp,nume_pacient,adresa) values ('1234567813121','CALIN IOANA','BALS');
INSERT INTO PACIENT(cnp,nume_pacient,adresa) values ('1234568899123','MATEI DIANA','SLATINA');

INSERT INTO BOALA(cod_boala,denumire_boala) values (1,'REUMATISM');
INSERT INTO BOALA(cod_boala,denumire_boala) values (2,'SINUZITA');
INSERT INTO BOALA(cod_boala,denumire_boala) values (3,'MENINGITA');
INSERT INTO BOALA(cod_boala,denumire_boala) values (4,'GRIPA');
INSERT INTO BOALA(cod_boala,denumire_boala) values (5,'BRONSITA');

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567891223',1,1,10);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567891223',2,5,18);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567891333',1,5,15);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567891333',1,2,13);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567891333',2,3,20);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567813121',3,4,30);
INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234567812233',3,2,10);
INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234568899123',4,1,15);

INSERT INTO DIAGNOSTIC(cnp,cod_boala,cod_medicament,cantitate_medicament)
values
('1234568899123',5,5,3);

MarPlo Mesaje:4343
Salut
Cred ca trebuie facut Select in tabel "medicament" cu alte doua sub-Select-uri (in tabelele "diagnostic" si "pacient") ca sa identifici "cod_medicament" dupa "cnp". Incearca asa (o fi si alta solutie, dar asta o stiu):

Cod: Selectaţi tot

SELECT SUM( `pret_unitar` * `diagnostic`.`cantitate_medicament` ) AS cost
FROM `medicament` , `diagnostic`
WHERE `medicament`.`cod_medicament`
IN (
  SELECT `diagnostic`.`cod_medicament`
  FROM `diagnostic`
  WHERE `cnp` = (
    SELECT `cnp`
    FROM `pacient`
    WHERE `nume_pacient` = 'DINU MARIA'
    LIMIT 1
  )
)

Subiecte similare