 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
Amazing Science
Data înscrierii: 15/Oct/2006
Mesaje: 114
|
| Trimis: Mie Noi 28, 2007 6:42 pm Titlul subiectului: concatenare tabele |
|
|
salutare! apelez iar la ajutorul vostru, care intotdeauna a fost de mare folos...
in MS SQL Server am 3 (sau mai multe tabele) tabele: pac_01, pac_02, pac_03, etc cu exact aceleasi campuri, sa spunem:
nr_inreg, nume, adresa, telefon, data_consult, tratament, etc...
nr_inreg este cheie unica in fiecare tabela
in primul tabel am pacientii din ianuarie, in al doilea din februarie, in al treilea din martie, dar in felul urmator:
pac_01=pacientii din ianuarie
pac_02=pacientii din iaruarie (pac_01) + pacientii noi adaugati la 1 februarie
pac_03=pacientii din ianuarie si februarie (pac_02) + pacientii noi adaugati la 1 martie
de la o luna la alta apar pacienti noi, care se adauga in baza de date la fiecare data de 1 a lunii
vreau sa fac o tabela pacienti_2007 care sa aiba structura aceasta:
nr_inreg, nume, adresa, telefon, data_consult_01, tratament_01, data_consult_02, tratament_02, data_consult_03, tratament_03, etc
in acest tabel as dori, deasemenea, ca nr_inreg sa fie cheie primara (sa nu se repete un pacient, chiar daca el se afla in toate 3 tabelele)
ma puteti ajuta?
multumesc anticipat. |
|
| Sus |
|
oceans
Data înscrierii: 13/Noi/2007
Mesaje: 82
Locație: qosmio
|
| Trimis: Mie Noi 28, 2007 7:44 pm Titlul subiectului: |
|
|
in ultimul tabel cu pacientii pe tot anul pacienti_2007, numele si adresa(in cazul in care ii chema la fel dar sunt persoane diferite adresa face diferenta) sa fie unique.
ALTER TABLE pacienti_2007 ADD CONSTRAINT UniqueValues UNIQUE (nume, adresa); |
|
| Sus |
|
GIT
Data înscrierii: 12/Oct/2005
Mesaje: 38
Locație: Resita
|
| Trimis: Joi Noi 29, 2007 8:01 pm Titlul subiectului: |
|
|
Salut
Cred ca asta vrei: - o solutie dar nu cred ca este chiar super buna :)
//tabela 1
create table pac_01
(
nr_inreg number(10)
CONSTRAINT nn_nr_inreg NOT NULL
CONSTRAINT pk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT uk_nume NOT NULL UNIQUE
);
//inserare in tabela 1
insert into pac_01 values (1,'Popescu Ion');
insert into pac_01 values (2,'Popescu Vasile');
//tabela 2
create table pac_02
(
nr_inreg number(10)
CONSTRAINT nnn_nr_inreg NOT NULL
CONSTRAINT pkk_nr_inreg PRIMARY KEY
,nume varchar2(100)
CONSTRAINT ukk_nume NOT NULL UNIQUE
);
//inserare in tabela 2
insert into pac_02 values (3,'Pop Ion');
insert into pac_02 values (4,'Pop Vasile');
//inserarea datelor din tabela 1 in tabela 2
insert into pac_02 (nr_inreg,nume)
select p1.nr_inreg,p1.nume
from pac_01 p1
where p1.nr_inreg not in (select p2.nr_inreg
from pac_02 p2
where p2.nr_inreg <> p1.nr_inreg);
//vizualizarea datelor din tabela 2
select * from pac_02
La aceste tabele se adauga ce coloane mai doresti tu.
Intrebarea mea este - daca am inteles bine ce urmeaza sa faci - de ce nu faci o tabela generala si apoi din ea in functie de data adaugarii sa iti creezi tabele personalizate pe zile sau luni sau ce ai tu nevoie.
Bafta. |
|
| Sus |
|
GIT
Data înscrierii: 12/Oct/2005
Mesaje: 38
Locație: Resita
|
| Trimis: Joi Noi 29, 2007 8:08 pm Titlul subiectului: |
|
|
Salut
Daca mergi pe ideea de a avea o tabela generala din care vrei sa faci tabele pe luni faci ceva de genul asta dupa ce introduci datele in tabela generala - aceasta trebuie sa aiba de preferat campul data in care a fost adaugat sau consultat pacientul.
Cod:
insert all
when extract (MONTH from data) = 7 then
into pac_iulie
when extract (MONTH from data) = 8 then
into pac_august
Atentie: EXTRACT numai de la Oracle 9i2 dupa cate stiu eu
Bafta |
|
| Sus |
|
dechim
Data înscrierii: 10/Mai/2005
Mesaje: 656
Locație: Drobeta Turnu Severin
|
| Trimis: Joi Noi 29, 2007 8:55 pm Titlul subiectului: |
|
|
Are dreptate @GIT ar trebui sa ai o singura tabela pe care sa o actualizezi si daca vrei sa faci tabele pe luni, desi nu le vad rostul, poti face de fapt VIEW-uri
dupa sintaxa MS SQL SERVER :
Cod:
CREATE VIEW view_name [(column [,...n])]
[WITH ENCRYPTION]
AS
select_statement
[WITH CHECK OPTION]
Probabil ca cel care a facut aplicatia a lucrat mai inainte in FoxPro si foloseste tabele mai mici pentru ca se justificau acolo da' aici nu-i cazul. O singura tabela e de ajuns.
Pentru optimizare eu as zice doua:
tabela 1 :
id1, cnp, nume, adresa, telefon, (alte date de identificare a pacientului)
tabela 2:
id2, id1, nr_inreg, data_consult, tratament (alte date referitoare la investigatie si tratament)
Poate ar fi bine sa transformi tabelel in asa ceva. Va fi mai usor in viitor. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|