Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Multitable join problem

[es] :: MySQL :: Multitable join problem

[ Pregleda: 1290 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

s4djan
Student
Tu iza coska

Član broj: 220356
Poruke: 82
*.adsl.eunet.rs.

Sajt: www.erecepti.com


+2 Profil

icon Multitable join problem17.02.2011. u 20:12 - pre 160 meseci
Uzeo sam u poslednje vreme da vezbam malo "komplikovanije" (za mene) join upite u mysql-y. Postavio sam sebi logican model i krenuo da postavljam probleme i iste resavam. Na pocetku je sve islo kako treba ali sam naisao na sledeci problem:

Imam tri tabele:

categories(id, parent_id),
categories_languages(category_id, language_id, name, description)
languages(id, name)


Cilj:
Zelim da izlistam sve kategorije sa svojim parent kategorijama (ogranicio sam se na tri nivoa) odnosno njihova njihova id i name polja za odredjeni jezik.

Ja sam uradio sledece (ispise mi samo id-eve):

Code:

SELECT t1.id, t2.id, t3.id
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent_id = t1.id
LEFT JOIN categories AS t3 ON t3.parent_id = t2.id


to je jednostavan deo posla jer kada dodam ovo,

Code:

LEFT JOIN categories_languages AS cl1 ON cl1.category_id = t1.id
LEFT JOIN categories_languages AS cl2 ON cl2.category_id = t2.id
LEFT JOIN categories_languages AS cl3 ON cl3.category_id = t3.id
WHERE cl1.language_id = 1
AND cl2.language_id = 1
AND cl3.language_id = 1


eliminise mi sve redove gde je id null.

Ja dalje ne znam, ne mogu da mrdnem svasta sam citao ova dva dana ali nisam naisao na onaj klik koji ce mi resiti ovo, pa zato vas molim da mi pomognete.
 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Multitable join problem17.02.2011. u 20:42 - pre 160 meseci
WHERE služi za eliminaciju redova. Znači ti si stavio da ti vraća samo redove kod kojih su id ove tri tabele jednaki 1. Isto tako ako hoćeš da ti pored ovih redova vraća i redove kod kojih je id NULL onda to moraš da staviš u WHERE klauzuli. Na primer dodaš u tvoj kod:

Code (sql):
SELECT t1.id, t2.id, t3.id
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent_id = t1.id
LEFT JOIN categories AS t3 ON t3.parent_id = t2.id
WHERE cl1.language_id = 1
AND cl2.language_id = 1
AND cl3.language_id = 1
AND cl1.language_id IS NULL
AND cl2.language_id IS NULL
AND cl3.language_id IS NULL




 
Odgovor na temu

s4djan
Student
Tu iza coska

Član broj: 220356
Poruke: 82
*.adsl.eunet.rs.

Sajt: www.erecepti.com


+2 Profil

icon Re: Multitable join problem18.02.2011. u 06:38 - pre 160 meseci
"biske86" hvala sto si se javio ali moram da kazem da je u igri je jos jedna tabela "categories_languages" nju si izostavio jer samo iz nje mogu da izvucem imena na odredjenom jeziku.

Gore sam samo iskomplikovao pa evo opet da prikazem kompletan moj upit:

Code (sql):

SELECT
t1.id AS lev1,
t2.id AS lev2,
t3.id AS lev3,
cl1.name AS lev1_name,
cl2.name AS lev2_name,
cl3.name AS lev3_name
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent_id = t1.id
LEFT JOIN categories AS t3 ON t3.parent_id = t2.id
LEFT JOIN categories_languages AS cl1 ON cl1.category_id = t1.id
LEFT JOIN categories_languages AS cl2 ON cl2.category_id = t2.id
LEFT JOIN categories_languages AS cl3 ON cl3.category_id = t3.id
WHERE cl1.language_id = 1
AND cl2.language_id = 1
AND cl3.language_id = 1
 


on vraca samo redove koji imaju sva tri nivoa sve ostale koji imaju dva lil samo jedan ukloni.

Logika ovakve organizacije tabela u bazi jeste u tome da imam posebnu tabelu (categories_languages) za delove entiteta kategorija koje potrebno prevesti (name, desciption) pa stoga ta tabela ima category_id koji upucuje na koju kategoriju se sadrzaj odnosi i language_id koji upucuje na koji jezik se taj sadrzaj odnosi.
Logicki mi je to izgledalo ok ali ne znam da napisem ovaj upit jer citava situacija mi se zakomplikovala sa self-join.



Evo i baze sa tabelama:
Prikačeni fajlovi
 
Odgovor na temu

s4djan
Student
Tu iza coska

Član broj: 220356
Poruke: 82
*.adsl.eunet.rs.

Sajt: www.erecepti.com


+2 Profil

icon Re: Multitable join problem18.02.2011. u 19:21 - pre 160 meseci
Uspeo sam :

Code (sql):

SELECT
t1.id AS lev1, t2.id AS lev2, t3.id AS lev3,
cl1.name AS lev1_name,cl2.name AS lev2_name, cl3.name AS lev3_name
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent_id = t1.id
LEFT JOIN categories AS t3 ON t3.parent_id = t2.id
LEFT JOIN categories_languages AS cl1 ON cl1.category_id = t1.id AND cl1.language_id = (SELECT id FROM languages WHERE name = 'eng')
LEFT JOIN categories_languages AS cl2 ON cl2.category_id = t2.id AND cl2.language_id = cl1.language_id
LEFT JOIN categories_languages AS cl3 ON cl3.category_id = t3.id AND cl3.language_id = cl2.language_id
 


Samo jos jedno pitanje:
Da li po vasem misljenju ovakva organizacija tabela odnosno entiteta je pogodna za visejezicno strukturisanje modela, ili ima neki bolji nacin?
 
Odgovor na temu

[es] :: MySQL :: Multitable join problem

[ Pregleda: 1290 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.