Kako spojiti dve tabele?

1

Kako spojiti dve tabele?

offline
  • 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.
offline
  • Emil Beli
  • 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)



offline
  • 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...

offline
  • 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..

offline
  • Emil Beli
  • 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

offline
  • Peca  Male
  • 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.

offline
  • 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.

offline
  • 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 Smile Hocu da mi upise da li je musko,zensko ili nepoznato a ne brojeve..

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

to se reshava LOOKUP comboboxevima ili kakogod da implementiras... upisuje ID a prikazuje opis.

offline
  • 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.

Ko je trenutno na forumu
 

Ukupno su 537 korisnika na forumu :: 8 registrovanih, 1 sakriven i 528 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: cenejac111, ikan, pacika, Shilok, Smiljke, sombrero, TBF1D, voja64