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

kako do potebnih rezultata

[es] :: Baze podataka :: kako do potebnih rezultata

[ Pregleda: 4114 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maliX
ivan malik
bgd/ srbija i crna gora

Član broj: 1796
Poruke: 67
*.atlas.co.yu

ICQ: 47807731
Sajt: www.xajckop.co.yu


Profil

icon kako do potebnih rezultata23.07.2003. u 13:45 - pre 252 meseci
imam sledeci problem:
imam 4 tabele: firme, kategorije, fk (koja je 'xcross' za firme i kategorije), usluge sa odgovarajucim index-ima: idFirme, idKategorije, (idFirme,idKategorije) i idUsluge respektivno. kada mu dam sledeci upit:
Code:

SELECT firma, kategorija, LEFT(usluga,22), popust 
FROM firme f, kategorije k, usluge u, fk 
WHERE u.idFirme=f.idFirme AND f.idFirme=fk.idFirme AND fk.idKategorije=k.idKategorije AND f.idFirme='36'

dobijem to sto mi treba. problem nastaje kada neka firma ima vise od jedne usluge koju nudi: tada dobijam duple, odn. kvadrirane rezultate (ako firma nudi 3 usluge, dobijam 9 rezultata).

u cemu je problem?
Hu is having fun :)
Nevaspitanje nije opravdanje
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
*.verat.net



+11 Profil

icon Re: kako do potebnih rezultata23.07.2003. u 13:55 - pre 252 meseci

Nisi bas objasnio model do kraja. Probaj ovo.


SELECT f.firma, k.kategorija, LEFT(u.usluga,22), u.popust
FROM firme f, fk , kategorije k, usluge u,
WHERE f.idFirme = '36' AND
f.idFirme = fk.idFirme AND
fk.idKategorije = k.idKategorije AND
f.idFirme = u.idFirme

 
Odgovor na temu

maliX
ivan malik
bgd/ srbija i crna gora

Član broj: 1796
Poruke: 67
*.atlas.co.yu

ICQ: 47807731
Sajt: www.xajckop.co.yu


Profil

icon Re: kako do potebnih rezultata23.07.2003. u 14:18 - pre 252 meseci
same old, same old...
jos uvek 'kvadrirani' rezultati :(

da malo pojasnim...
izmedju ostalog imam 4 tabele:
firme (idFirme),
kategorije (idKategorije),
fk (idFirme,idKategorije) i
usluge (idUsluge) sa indexima navedenim u zagradama.

tabela 'fk' je xcross tabela za firme i kategorije (jer jedna firma moze biti u vise kategorija i u jednoj kategoriji je vise firmi: skolski primer tzv. many-to-many relacije; u MySQL (v4.0.12) zato korisnim jednu 'medjutabelu' u kojoj su primarni kljucevi iz tabela 'firme' i 'kategorije').
treba mi da izlistam koja firma nudi koje usluge u kojoj kategoriji.
npr.: SunBurn d.o.o. pripada kategorijama: 'Lepota', 'Solarijumi', 'Usluge', 'Nega lica i tela' i nudi sledece usluge: solarijum, pedikirske usluge i manikirske usluge

u bazi bi izgledalo kao:
firme:
+-------+---------------+
| idFirme| firma |
+-------+---------------+
| 16 |SunBurn d.o.o |
+-------+---------------+
kategorije:
+-----------+----------------+
| idkategorije| kategorija |
+-----------+----------------+
| 51 | Lepota |
| 52 | Solarijumi |
| 53 | Usluge |
| 54 | Nega lica i tela |
+-----------+----------------+
fk:
+-------+------------+
| idFirme| idKategorije |
+-------+------------+
| 16 | 51 |
| 16 | 52 |
| 16 | 53 |
| 16 | 54 |
+-------+------------+
usluge:
+--------+-----------------+
| idusluge| usluga |
+--------+-----------------+
| 1 |solarijum |
| 2 | pedikirske usluge |
| 3 | manikirske usluge |
+--------+-----------------+

treba mi pri listanju da vidim da:
SunBurn d.o.o nudi usluge solarijuma u kategoriji 'solarijum' i t.d.. ...
mada kada pogledam vidim da na osnovu ovoga se ne moze zakljuciti koja firma nudi koje usluge u kojoj kategoriji :(

da preformulisem pitanje:
kako da preuredim bazu da to dobijem? treba li mi direktna veza izmedju usluga i kategorija (verovatno) ili..?


Hu is having fun :)
Nevaspitanje nije opravdanje
 
Odgovor na temu

bluesman

Član broj: 4505
Poruke: 1895
*.59.eunet.yu



+1 Profil

icon Re: kako do potebnih rezultata23.07.2003. u 18:14 - pre 252 meseci
Korisiti GROUP BY...

Znaci, ako hoces da ne dobijas 2 razultata za istu firmu dodaj na kraju querija GROUP BY idFirme

Ali ako hoces da dobijes i sve usluge onda ne moze u jednom queriju nego
SELECT idFirme as id firma...
pa onda u petlji za svku firmu
SELECT usluge gde je idFirme = id
Goran Pilipović fka bluesman
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.drenik.net



+3 Profil

icon Re: kako do potebnih rezultata24.07.2003. u 02:11 - pre 252 meseci
Pa normalno da treba da preuredis bazu. Pitanje je da li usluga pripada samo jednoj kategoriji ili ne. Ako je odnos 1:n onda u tabeli usluga dodaj polje idkategorije, ako je odnos n:n onda ti treba dodatna tabela sa poljima idusluge, idkategorije. Ako nisi siguran pretpostavi da je odnos n:n.
Posle toga u WHERE uslovu treba da povezes kategorije sa uslugama i firme sa kategorijama i bez problema mozes da dobijes koje sve usluge firma nudi kao i sve kategorije (isto ovo i za sve firme). Rezultat upita ce ti biti oblika (prve dve kolone nisu ovabezne:))

+---------------+--------+---------+
| firma1 | kat1 | usluga1 |
+---------------+--------+---------+
| firma1 | kat1 | usluga2 |
+---------------+--------+---------+
| firma1 | kat2 | usluga3 |
+---------------+--------+---------+
| firma1 | kat2 | usluga2 |
+---------------+--------+---------+

Napisao bi ti ja sve detaljno ali me stvarno mrzi (i ovo je mnogo).
Owl
 
Odgovor na temu

bluesman

Član broj: 4505
Poruke: 1895
*.253.EUnet.yu



+1 Profil

icon Re: kako do potebnih rezultata24.07.2003. u 02:46 - pre 252 meseci
To on i dobija ali mu to ne treba, ako sam ja dobro shvatio a ti pogresno razumeo :-)
Goran Pilipović fka bluesman
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.verat.net



+3 Profil

icon Re: kako do potebnih rezultata24.07.2003. u 02:51 - pre 252 meseci
Citat:

problem nastaje kada neka firma ima vise od jedne usluge koju nudi: tada dobijam duple, odn. kvadrirane rezultate (ako firma nudi 3 usluge, dobijam 9 rezultata).


Citat:

To on i dobija ali mu to ne treba, ako sam ja dobro shvatio
a ti pogresno razumeo :-)

Sinko gresis ovaj silno gresis (on dobija tacno ono sto je trazio, sve usluge koje nudi jedna firma a da pritom nisu duplirane -- pod uslovom da je odnos kategorija i usluga 1:n u suprotnom treba da uradi GROUP BY usluge)
Owl
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
*.verat.net



+11 Profil

icon Re: kako do potebnih rezultata24.07.2003. u 11:22 - pre 252 meseci
Citat:
maliX:
treba mi da izlistam koja firma nudi koje usluge u kojoj kategoriji.
npr.: SunBurn d.o.o. pripada kategorijama: 'Lepota', 'Solarijumi', 'Usluge', 'Nega lica i tela' i nudi sledece usluge: solarijum, pedikirske usluge i manikirske usluge


Meni se ovo cini kao malo naopak princip. Zar nije bolje da usluge podelis po kategorijama? Tada, samim tim sto nekoj firmi dodelis neku uslugu dodelio si i kategoriju.

Sto se prepravke tice uradi sledece: izbaci tabelu fk (i uvek tabelama daj
opisno ime da se zna sta je).

U tabeli usluge dodaj polje id_kategorije i tu upisuj kojoj kategoriji pripada koja usluga.

Napravi tabelu firme_usluge gde ces firme povezivati sa uslugama.

Tad ce ti sve biti jednostavnije


Ovo kako ti sad stoji uopste nema vezu izmedju firmi i usluga. Ako hoces da ti ostane kako jeste (da su kategorije nezavisne od usluga) onda samo dodaj tabelu firme_usluge gde ces povezivati firme i usluge. Nedostatak ove veze (a ukljucivanje tabele usluge u upit ti i pravi te duple redove. To uopste nisam primetio u gornjem upitu, ti nigde nemas mogucnost da u where uslovu filtriras slogove iz tabele usluge.
 
Odgovor na temu

maliX
ivan malik
bgd/ srbija i crna gora

Član broj: 1796
Poruke: 67
*.atlas.co.yu

ICQ: 47807731
Sajt: www.xajckop.co.yu


Profil

icon Re: kako do potebnih rezultata25.07.2003. u 11:51 - pre 252 meseci
cini mi se da sam uspeo da se 'iskobeljam'
kao sto se dalo primetiti nije postojala veza izmedju usluga i kategorija
kako se usluge unose direktno (nisu jednoznacno odredjene, kao kategorije na primer) u tabelu usluge sam dodao kolonu: 'idKategorije';

nakon preuredjivanja podataka i srdjivanja, sa naredna dva upita dobijam potrebne rezultate:
[1] usluge firmi pokategorijama i
[2] broj usluga firmi po kategorijama
(uz male izmene, skoro sve sto mi treba):
Code:

SELECT kategorija, firma, left(usluga,30), popust  
FROM firme f, kategorije k, usluge u, fk 
WHERE u.idfirme=f.idfirme 
AND f.idfirme='13' 
AND f.idfirme=fk.idfirme 
AND fk.idkategorije=k.idkategorije 
AND u.idkategorije=fk.idkategorije;

odn.
Code:

SELECT kategorija, firma, left(usluga,30), count(usluga)  
FROM firme f, kategorije k, usluge u, fk 
WHERE u.idfirme=f.idfirme 
AND f.idfirme='13' 
AND f.idfirme=fk.idfirme 
AND fk.idkategorije=k.idkategorije 
AND u.idkategorije=fk.idkategorije
GROUP BY (kategorija);


hvala na pomoci
Hu is having fun :)
Nevaspitanje nije opravdanje
 
Odgovor na temu

[es] :: Baze podataka :: kako do potebnih rezultata

[ Pregleda: 4114 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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