Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 3.547 pregleda

Najnovija ↓

Select na osnovu vise kriterijuma 23.12.2014. u 10:42 · pre 144 meseca
izmenjeno 1 put, poslednji put NenadS 23.12.2014. u 11:23
  1. NenadS23.12.2014. u 11:23zapis iz teksta poruke
#1
Imam problem sa jednim upitom pa se nadam da ce neko imati vremena da mi pomogne da ga resim.

O cemu se radi. Dobio sam projekat za fax da napravim bazu za potrebe agencije za prodaju nekretnina.

Nekretnina moze da bude zemljiste, zgrada, stan, garaza ili nesto drugo.. .dakle, nije konacna lista.

Svaka od nekretnina moze da ima neke karakteristike, recimo za stan mozemo da imamo sprat, terasu, broj spav. soba, klimu, parking mesto recimo i ostalo... znaci isto nije konacna lista i za razlicit tip nekretnine mozemo da imamo razlicite karakteristike.

Ja sam to realizovao ovako:

- tabela nekretnina
- tabela tip nekretnina ciji se ID spusta u tabelu nekretnina

- tabela karakteristika koja ima samo naziv karakteristike
- tabela vrednost_karakteristike koja dobija ID nekretnine i IT karakteristike i ima polje u kome cuva konkretnu vrednost

Problem koji imam je da pronadjem recimo nekretninu koja ima terasu, klimu, parking mesto i koja se nalazi na spratu vecem od treceg.

Ovo je tabela koja cuva podatke o tim specificnim karakteristikama:




Dakle, u njoj kao sto sam rekao imam ID nekretnine, zatim ID karakteristike i vrednost karakteristike... ali ne mogu da napisem upit koji ce zadovoljiti gore pomenute uslove ili bilo koju kombinaciju... recimo da li ima kablovsku itd...

Ako upotrebim WHERE sa OR, on ce mi naci ako nekretnina ima bar jednu od trazenih karakteristika sto nije dobro, a ako upotrebim AND, onda nema rezultata.

Pokusavao sam nesto sa GROUP BY ID_NEKRETNINA i HAVING pa tu da nabrojim karakteristike ali dobijam info da takav having nije moguc.

Da li imate neko resenje za ovaj problem ili predlog kako da izmenim strukturu baze da bih mogao da uradim upit ali da to nije pravljenje onoliko kolona koliko karakteristika imam i za svaki tip karakteristike pravljenje posebne tabele... ili je to ipak jedino resenje?
Potpis
Pozdrav, NenadS!
Re: Select na osnovu vise kriterijuma 24.12.2014. u 22:39 · pre 144 meseca #2
Ovo je nekakav EAV model.... Mozes ovo na vise nacina, evo jedan:
idi sa WHERE i OR, pa grupisi po ID_NEKRETNINA i odradi "COUNT".
Onda izaberi rezultate koji imaju "COUNT" jednak broju trazenih parametara.



Nesto ovako (pseudo kod):

Code:

SELECT id_nepokretnost, COUNT() AS br
FROM vrednost_karakteristike
WHERE 
vrednost_karakteristike=xxx
OR vrednost_karakteristike = yyy
OR vrednost_karakteristike = zzz
GROUP BY id_nepokretnost
HAVING  br = broj_parametara_u_where_uslovu

Re: Select na osnovu vise kriterijuma 24.12.2014. u 23:36 · pre 144 meseca
izmenjeno 1 put, poslednji put NenadS 24.12.2014. u 23:48
  1. NenadS24.12.2014. u 23:48zapis iz teksta poruke
#3
Hvala ti puno!

Na osnovu tvoje ideje, napravio sam sledeci upit koji mi vraca zeljeni rezultat:


Code:
SELECT v.IME, v.ADRESA, v.TELEFON, n.DRZAVA, n.GRAD, n.ULICA, n.POVRSINA, n.CENA, tn.TIP_NEPOKRETNOSTI
FROM vlasnik AS v
JOIN nepokretnost AS n ON v.ID_VLASNIK = n.ID_VLASNIK
JOIN tip_nepokretnosti AS tn ON n.ID_TIP_NEPOKRETNOSTI = tn.ID_TIP_NEPOKRETNOSTI
JOIN nepokretnost_karakteristika AS nk ON n.ID_NEPOKRETNOST = nk.ID_NEPOKRETNOST
JOIN tip_nepokretnosti_karakteristika AS tnk ON nk.ID_TIP_NEPOKRETNOSTI_KARAKTERISTIKA = tnk.ID_TIP_NEPOKRETNOSTI_KARAKTERISTIKA
JOIN karakteristika AS k ON tnk.ID_KARAKERISTIKA = k.ID_KARAKERISTIKA
WHERE ((k.NAZIV_KARAKTERISTIKE = 'Terasa' AND nk.VREDNOST_KARAKTERISTIKE = 'Da')
OR (k.NAZIV_KARAKTERISTIKE = 'Parking mesto' AND nk.VREDNOST_KARAKTERISTIKE = 'Da')
OR (k.NAZIV_KARAKTERISTIKE = 'Klima' AND nk.VREDNOST_KARAKTERISTIKE = 'Da')
OR (k.NAZIV_KARAKTERISTIKE = 'Sprat' AND nk.VREDNOST_KARAKTERISTIKE > 3))
AND n.DRZAVA = 'Srbija'
AND n.GRAD = 'Niš'
AND n.POVRSINA > 50
GROUP BY n.id_nepokretnost
HAVING COUNT(*) = (SELECT COUNT(*) FROM karakteristika AS k WHERE k.NAZIV_KARAKTERISTIKE IN('Terasa', 'Parking mesto', 'Klima', 'Sprat'))


Hvala jos jednom, bas sam se namucio sa ovim :(

Sve najbolje!
Potpis
Pozdrav, NenadS!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme