Poslao: 27 Mar 2007 18:57
|
offline
- sadux
- Građanin
- Pridružio: 22 Feb 2005
- Poruke: 282
- Gde živiš: Šabac
|
Imam dve tabele koje bi trebalo da spojim samo ne znam kako to da izvedem u phpmyadmin-u.
Imam jednu tabelu(main) gde mi se nalaze 3 polja;id,ime,pol
A druga(pol) mi je;id,opis.
id.1
ime.pera
pol > pol.opis
id.1
opis.nepoznato
id.2
opis.musko
..............
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 27 Mar 2007 19:07
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
ne moze tako, to je sve lose
tvoja main tabela treba da ima
id, ime (opis), pol (id)
Onda jos tabela Polovi: ID, opis pola
Onda, cemo da obelezimo ovako:
(main tabela - naziv "Imena")
IME_CdiIme, IME_DssIme, IME_CdiPol
(polovi)
POL_CdiPol, POL_DssPol
Spajanje:
SELECT IME_CdiIme, IME_DssIme, POL_DssPol FROM Imena
INNER JOIN Polovi on (POL_CdiPol = IME_CdiPol)
|
|
|
|
Poslao: 27 Mar 2007 22:19
|
offline
- loshmi_sr
- Građanin
- Pridružio: 08 Jan 2007
- Poruke: 279
- Gde živiš: Srbija
|
Imaš više načina, beli0135 je dao svoje viđenje, a evo i mog...
Entiteti, polovi i recimo lica.
Relacije:
1) sif_pol
2) lica
Prefiks "sif_" dodaješ da se šifarnici, može ih biti više, razlikuju od ostalih relacija u bazi.
SQL:
-- sifarnik polova
-- mozes postaviti i unique na atribut pol, da ne dozvolis ponavljanja,
-- radi jednostavnosti primera to nisam uradio
create table sif_pol
(
id_pol integer not null,
pol varchar(7),
constraint pk_sif_pol primary key (id_pol)
);
-- tabela u koju se unose lica
create table lica
(
id_lica integer not null,
ime varchar (20),
prezime varchar (20),
id_pol integer,
constraint pk_lica primary key (id_lica),
constraint fk_lica foreign key (id_pol)
references sif_pol (id_pol)
on update cascade
on delete restrict
);
Sad se ostvaruje referencijalni integritet i tabele su povezane preko spoljašnjeg ključa, "foreign key".
Spajanje, recimo ovim upitom, za primer kroz poglede(view):
create view lica_upit1 as
select l.ime, l.prezime, sp.pol
from lica l, sif_pol sp
where l.id_pol = sp.id_pol
ili kao što je beli0135 naveo:
create view lica_upit2 as
select l.ime, l.prezime, sp.pol
from lica l
inner join sif_pol sp on l.id_pol = sp.id_pol
Kao što vidiš, slični odgovori, što je dokaz da se jedan problem može rešiti na više načina.
BTW, pisao sam iz glave...
|
|
|
|
Poslao: 28 Mar 2007 01:32
|
offline
- sadux
- Građanin
- Pridružio: 22 Feb 2005
- Poruke: 282
- Gde živiš: Šabac
|
Hvala.
Ali nista ovde meni nije jasno..Radio sam i povezivao tabele u accesu ali mi ovde u sql nista ne ide..
Kako ja sad da vidim tu relaciju,sta da radim sa njim?Kako da je integrisem..
|
|
|
|
Poslao: 28 Mar 2007 04:18
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
Vidi ovako, relacije se prave SAMO po integer poljima, i ta polja:
1. u sopstvenoj tabeli su primarni kljuc (Primery Key - PK)
2. u drugoj tabeli je to integer polje koje ima index, i to se zove strani kljuc (foreign key - FK)
Primer
-----------
Tabela "boje", 2 polja, PK i opis, (koristicu jednostavno, da se ne gubis u nomenklaturi)
Boje_Id, Boje_Opis
popunjena je ovako
0, nista
1, bela
2, plava
3, crna
tabela "pastele", 3 polja. PK, FK za boje i opis
Pastele_Id, Pastele_boja_id, Pastele_opis
0, 0, nema_pastele
1, 1, faber_castel
2, 1, pelikan
3, 2, faber_castel
4, 1, Michelangelo
Kao sto vidis, ove 2 tabele su u relaciji, zato sto tabela "pastele" ima polje za vezivanje sa tabelom boje.
Ako analiziras, videces da postoje 2 faber_castel pastele, u beloj i plavoj boji, jedna pelikan pastela u beloj i jedna Michelangelo pastela u beloj.
Evo jednog obicnog select-a
SELECT Pastele_id, Boje_Opis, Pastele_opis FROM Pastele
INNER JOIN Boje ON (Pastele_Boja_id = Boja_id)
WHERE Pastele_id > 0
|
|
|
|
Poslao: 28 Mar 2007 05:06
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
loshmi_sr ::
create view lica_upit1 as
select l.ime, l.prezime, sp.pol
from lica l, sif_pol sp
where l.id_pol = sp.id_pol
Samo da pazi:
Citat:The CREATE VIEW statement was added in MySQL 5.0.1.
Mnogi jos vrte Mysql 4.1.
|
|
|
|
Poslao: 28 Mar 2007 12:46
|
offline
- loshmi_sr
- Građanin
- Pridružio: 08 Jan 2007
- Poruke: 279
- Gde živiš: Srbija
|
Citat:sadux:
Radio sam i povezivao tabele u accesu ali mi ovde u sql nista ne ide..
Da li u Access -u još radiš?
Ako da, preporučujem da pređeš na neki DBMS u zavisnosti od posla koji radiš, a i ako tek učiš da odmah to radiš pravilno.
Ima i dobrih CASE alata gde to sve grafički možeš prikazati.
|
|
|
|
Poslao: 31 Mar 2007 13:42
|
offline
- sadux
- Građanin
- Pridružio: 22 Feb 2005
- Poruke: 282
- Gde živiš: Šabac
|
Ok pomalo sam poceo da kontam..
Znaci ja sad ovu "novu" tabelu koja je napravljena "lica_upit1" i gde je izvrseno povezivanje da koristim samo za prikaz,jel tako?
Kad postavljam stranu za upis,ona mora da se upisuje u tabelu "lica"?
I sta mi je sad problem,ako je podeljeno u tabeli "sif_pol " id broj,koji je prakticno kljuc,problem je u tome sto ja necu da mi korisnik zna broj od tog zapisa,sto je pomalo glupo Hocu da mi upise da li je musko,zensko ili nepoznato a ne brojeve..
|
|
|
|
Poslao: 31 Mar 2007 14:01
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
to se reshava LOOKUP comboboxevima ili kakogod da implementiras... upisuje ID a prikazuje opis.
|
|
|
|
Poslao: 31 Mar 2007 22:58
|
offline
- loshmi_sr
- Građanin
- Pridružio: 08 Jan 2007
- Poruke: 279
- Gde živiš: Srbija
|
sadux ::
Znaci ja sad ovu "novu" tabelu koja je napravljena "lica_upit1" i gde je izvrseno povezivanje da koristim samo za prikaz,jel tako?
I jeste i nije. To nije tabela, to je view, pogled, privremena tabela koja nastaje iz baznih. E sad, lično, ne koristim poglede, to sam samo radi primera dao, nego to što sam postavio za pogled pozivam iz same aplikcije koju razvijam.
Lookup polja ti rešavaju problem (šifra - opis), ima još načina ali ovo je najjednostavnije.
|
|
|
|