Join ili union

imam tablicu ‘hrvatska’ iz koje izvlacim podatke na sljedeci nacin:

  1. TABLICA ‘korisnici’:

IME STATUS ZEMLJA
Ivan ozenjen hrvatska
Marko neozenjen hrvatska
Ante neozenjen hrvatska
Petar ozenjen hrvatska

SELECT * FROM tablica where zemlja=‘hrvatska’;

Rezultati:

IME STATUS
Ivan ozenjen
Marko neozenjen
Ante neozenjen
Petar ozenjen

  1. TABLICA ‘cijene’:

STATUS CIJENA
ozenjen 100

Na koji nacin mogu izlistanim podacima prve tablice pridruziti jos
jedan podatak iz druge tablice ali s tim da se samo kod pojedinaca sa
statusom ozenjen ova cijena i nalazi tako da mi izlist pokazuje sljedece:

Ime Status Cijena

Ivan ozenjen
Marko neozenjen 100
Ante neozenjen 100
Petar ozenjen

Mislio sam sa LEFT JOIN-om ali mislim da nije to to.

SELECT * FROM tablica where zemlja=‘hrvatska’ LEFT JOIN cijene ON (cijene.status = korisnici.status);

Mali ispravak bila je mala greska na kraju, samo sam izmjenio mjesto gdje se cijena nalazi, ( 100 ozenjen )

[quote=“tchibo”]imam tablicu ‘hrvatska’ iz koje izvlacim podatke na sljedeci nacin:

  1. TABLICA ‘korisnici’:

IME STATUS ZEMLJA
Ivan ozenjen hrvatska
Marko neozenjen hrvatska
Ante neozenjen hrvatska
Petar ozenjen hrvatska

SELECT * FROM tablica where zemlja=‘hrvatska’;

Rezultati:

IME STATUS
Ivan ozenjen
Marko neozenjen
Ante neozenjen
Petar ozenjen

  1. TABLICA ‘cijene’:

STATUS CIJENA
ozenjen 100

Na koji nacin mogu izlistanim podacima prve tablice pridruziti jos
jedan podatak iz druge tablice ali s tim da se samo kod pojedinaca sa
statusom ozenjen ova cijena i nalazi tako da mi izlist pokazuje sljedece:

Ime Status Cijena

Ivan ozenjen 100
Marko neozenjen
Ante neozenjen
Petar ozenjen 100

Mislio sam sa LEFT JOIN-om ali mislim da nije to to.

SELECT * FROM tablica where zemlja=‘hrvatska’ LEFT JOIN cijene ON (cijene.status = korisnici.status);[/quote]

mozes na vise nacina

npr

SELECT tablica1.*, tablica2.id, tablica2.ime FROM tablica1, tablica2 WHERE tablica1.id=tablica2.id

ili LEFT JOIN

meni svakako treba nekakav join jer spajam vise tablica ovo je samo dio koda s kojim zelim ovaj podatak izvuci iz tablice cijene.

Mislim da mi ovdje nastaje greska LEFT JOIN cijene ON (cijene.status = korisnici.status);

[quote=“tchibo”]

SELECT * FROM tablica where zemlja=‘hrvatska’ LEFT JOIN cijene ON (cijene.status = korisnici.status);[/quote]

ostalo ti ovo “tablica”, treba biti korisnici

Nisam siguran dali smo se dobro razumijeli.

U drugoj tablici se nalazi samo jedan redak i taj zelim pridodati svakom retku iz prve tablice u kojemu je redak status jedan retku status u drugoj tablici.

Ovako kako smo mi sastavili

Znaci: “Puni izlist prve tablice uz dodatak cijene iz druge ukoliko se podadaraju retci ‘status’.”

Pronasao sam gdje je problem ali ga ne mogu dokuciti.

znaci imam sljedeci query koji je OK.

  1. SELECT korisnici.ime, korisnici.status, cijene.cijena FROM korisnici, LEFT JOIN cijene ON (cijene.status = aakorisnici.status) WHERE zemlja=‘hrvatska’;

Ali posto je ovo samo dio koda i tu imam vise tablica koje uzimam u obzir te u ovaj query dodam jos neku tablicu koja nema niti status niti cijenu nego jednostavno potrebna u query-u dolazi do zbrke.

  1. SELECT korisnici.ime, korisnici.status, cijene.cijena, knjige.zanr FROM korisnici, knjige LEFT JOIN cijene ON (cijene.status = korisnici.status) WHERE zemlja=‘hrvatska’;

Pronasao sam gdje je problem ali ga ne mogu dokuciti.

znaci imam sljedeci query koji je OK.

  1. SELECT korisnici.ime, korisnici.status, cijene.cijena FROM korisnici LEFT JOIN cijene ON (cijene.status = korisnici.status) WHERE zemlja=‘hrvatska’;

Ali posto je ovo samo dio koda i tu imam vise tablica koje uzimam u obzir te u ovaj query dodam jos neku tablicu koja nema niti status niti cijenu nego je jednostavno potrebna u query-u dolazi do zbrke.

  1. SELECT korisnici.ime, korisnici.status, cijene.cijena, knjige.zanr FROM korisnici, knjige LEFT JOIN cijene ON (cijene.status = korisnici.status) WHERE zemlja=‘hrvatska’;

Čekaj, a gdje si povezao “korisnici” i “knjige”?

Veza je kolona ‘kod’ koju tu nisam naveo

:bljesak:

A da ipak napišeš cijeli kod?

Napiši PRAVE strukture tablica.

to je ustvari kod, samo sto ranije nisam stavio tablicu knjige.
Ona je povezana kolonom ‘kod’ sa korisnicima.

Znaci tablice knjige i korisnici imaju jos kolonu kod.

Tablica Knjige ima jos kolone:

KOD NASLOV ZANR AUTOR

Gle, zamolio sam te da napišeš strukture svih tablica.

Misliš da će ti netko pomoći ako daješ podatke na kapaljku?

ne dajem nista na kapaljku, nego pokusavam prilagoditi upite tako da shvatim ono sto mi se govori, nisam programer a ponekad su odgovori prekomplicirani da bi ih shvatio a kamoli implementirao.

Znaci:

Tablica Korisnici:
KOD IME STATUS ZEMLJA

Tablica Cijene:
STATUS CIJENA

Tablica Knjige:
KOD NASLOV ZANR AUTOR

Tablica korisinici i cijene su vezane statusom
Tablice Korisinici i knjige kodom.

Nadam se da je to to sto si trazio.

Da.

Imaš dva moguća rješenja.

SELECT korisnici.ime, korisnici.status, cijene.cijena, knjige.zanr
FROM korisnici, knjige, cijene
WHERE korisnici.kod = knjige.kod
AND korisnici.status = cijene.status
AND korisnici.zemlja=‘hrvatska’

SELECT korisnici.ime, korisnici.status, cijene.cijena, knjige.zanr
FROM korisnici LEFT JOIN knjige ON korisnici.kod = knjige.kod
LEFT JOIN cijene ON korisnici.status = cijene.status
WHERE korisnici.zemlja=‘hrvatska’

hvala

Pokusavam u LEFT join ubaciti vanjsku varijablu koja nema veze sa tablicama. Da li je uopce preporucivo?

LEFT JOIN knjige ON korisnici.kod = knjige.kod LEFT JOIN cijene ON korisnici.status = cijene.status AND $varijabla1=$varijabla2 WHERE korisnici.zemlja=‘hrvatska’

Racuna mi ok samo sto kada radim ORDER BY imam problema kod sortiranja. Cini mi se ukoliko je LEFT JOIN u pojedinim retcima FALSE da ce raditi zbrku prilikom ORDERA.

Stavljati uvjet na nešto što nema veze s podacima je vrlo upitne svrhe.

Mora se znati što je LEFT JOIN.
LEFT JOIN je kao ispružena ruka koja će prihvatiti nešto ukoliko postoji.

Ukoliko se radi ORDER na polje od tablice koja je joinana, postoji mogućnost da će sadržaj toga polja biti NULL i order po takvom polju se mora dobro složiti.
Preporučam da se kod selecta takvog polja koristi ISNULL(POLJE, ‘’) ili ISNULL(POLJE, 0) ovisno o tipu POLJE.

Bi li mi mogao dati primjer toga o cemu govoris na osnovu naseg upita od ranije

SELECT korisnici.ime, korisnici.status, cijene.cijena, knjige.zanr
FROM korisnici LEFT JOIN knjige ON korisnici.kod = knjige.kod
LEFT JOIN cijene ON korisnici.status = cijene.status
WHERE korisnici.zemlja=‘hrvatska’ ORDER BY cijena

Jos jedna stvar, probao sam napraviti ORDER BY na osnovu kalkulacije row*row+row to radi ali opet dolazi do problema sa LEFT JOINOM. Da li je takav order uopce moguc.

Napiši što si probao jer ne razumijem što si želio postići.