|
PHP PHP aplikacije, Smarty, PEAR |
|
Alati teme | Način prikaza |
|
06. 05. 2009. | #1 |
Milan Cvejic
Wrote a book
|
database pretraga (and pa posle or)
Pozz,
razmisljam kako da napravim funkcionalnost pretrage tako da prvo prikazuje rezultate po "AND" kritrtijumu a posle po "OR"? dakle ako trazim "predsednik srbije" da mi prvo izbaci rezultate gde ima obe reci a tek posle rezultate sa nekom od njih... Jel ima neko neki bolji predlog od toga da pravim dva upita gde je jedan za "and" a drugi za "or"? Hvala!
__________________
http://weevify.com |
07. 05. 2009. | #2 |
Boban Karišik
Expert
|
Ja sam to jednom prilikom odradio ovako:
(da se odma ogradim, nije bila nesto ogromna baza) Znaci povuces podatke sa OR i onda preko preg_match-a za dobijene rezultate odradis pretragu za svaku rec. Rezultate stavis u novi niz, a za index niza stavis broj koliko reci ima match. Recimo: imas 3 rekorda u bazi: - predsednik je uspeo - predsednik srbije je nesto uradio - pocetak nove srbije Kad prodje kroz match, dobio bi ovakav niz: $res[2][] => "predsednik srbije je nesto uradio" $res[1][] => "predsednik je uspeo" $res[1][] => "pocetak nove srbije" Nadam se da ti ovo moze pomoci...
__________________
Ako već nisi Anđeo, bar budi čovek... Poslednja izmena od Blood : 07. 05. 2009. u 00:53. |
07. 05. 2009. | #3 |
Miljenko Rebernišak
Qualified
Datum učlanjenja: 05.03.2009
Lokacija: Jagodina-Beograd
Poruke: 191
Hvala: 4
25 "Hvala" u 22 poruka
|
Mogao bi da koristis union all da spojis ta dva upita u jedan posto pretpostavljam da je selektovani broj kolona isti.Ovo ce ti dati dvaput isti zapis.Mozes da uradis i grupisanje pa da izbacis duplikate. Ne znam kako ce uticati na performanse,ali testiraj ako se odlucis za tako nesto.
Poslednja izmena od razno : 07. 05. 2009. u 00:49. |
07. 05. 2009. | #4 |
Milan Cvejic
Wrote a book
|
uf... konkretno se radi o bazi koja ima preko 2 miliona rekorda...
@blood, interesantno resenje, ali na zalost nece bash da moze sa ovom kolicinom podataka... @razno, union i subqueriji na mysql-u nisu bash dobri sto se tice performansi... Ja sam nesto razmisljao, kao varijaciju na blood-ovu ideju tako da izvucem sve sa "OR", a da zatim prilikom obrade samog reda u petlji stavim testiranje da li se svi pojmovi nalaze u samom stringu, pa ako da onda da ih stavim u jedan niz, a ako ne onda da ih stavim u drugi... To mi izgleda kao najjednostavnije resenje, i verovatno najefikasnije, posto bi duplo drndanje po bazi bio poprilican problem, a svakako mi je neophodno da to sortiram... Jedina mana u celom ovom slucaju je to sto moze da bude proizvoljan broj reci, sto bi samim tim vodilo do broja nizova koji je ekvivalentan broju reci u pretrazi... uf... jel neko ima google source? :P Hvala svima, necu ovo do sutra sigurno da radim, pa ako neko ima bio bih zahvalan, i platio bih pivo na okupljanju sledece nedelje Heheh, mito i korupcija
__________________
http://weevify.com |
07. 05. 2009. | #5 |
Webeloper
Professional
|
__________________
Before you criticize someone, walk a mile in their shoes. By the time they get angry you're a mile away and you've got their shoes! |
07. 05. 2009. | #6 |
Nikola Denić
Sir Write-a-Lot
|
Lucene ?
__________________
Do not ask yourself what the world needs. Ask yourself what makes you come alive, and then go do that. Because what the world needs is people who have come alive |
07. 05. 2009. | #7 |
nobody
Expert
Datum učlanjenja: 19.04.2007
Poruke: 537
Hvala: 14
705 "Hvala" u 106 poruka
|
Sphinx ?
|
07. 05. 2009. | #8 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Malo je kontraintuitivno da se korisniku u rezultatima pretrage prikazuju mešani rezultati AND i OR, jer on kad kuca obično ima predstavu da se pretraga radi ili po jednom ili po drugom mehanizmu.
Moj predlog je da svakako radiš dva upita (na kraju krajeva, koliko često korisnici pretražuju), prvo AND, pa 1) Ako nema rezultata za AND, odmah uradiš OR i prikažeš korisniku rezultate OR, sa napomenom da je urađen fallback. 2) Ako rezultata za AND ima za manje od jedne strane, vratiš ih i ponudiš korisniku link kojim može da uradi OR 3) Ako AND rezultata ima za više od jedne strane, uopšte ne pominješ OR pretragu. |
3 članova zahvaljuje jablan za poruku: |
07. 05. 2009. | #9 |
Milan Cvejic
Wrote a book
|
@jablan,
eh, kada bih se ja pitao, to bi bilo tako... ali s'obzirom da klijent to trazi bash tako onda nemam sta sem da napravim kako zeli... Borba sa vetrenjacama nikad nije uradila plodom...
__________________
http://weevify.com Poslednja izmena od LiquidBrain : 07. 05. 2009. u 14:26. |
07. 05. 2009. | #10 |
Ivan Dilber
Sir Write-a-Lot
|
gresis oko uniona, ponekad je UNION ALL brze od OR, zavisi od indexa. Ja sam imao slucaj sa fultext searchom po naslovi i textu clanka, koji je jos trebalo sortirati po relevantnosti, i sa OR nikako nije hteo da koristi indexe kako treba, pa je UNION ALL bio znacajno brzi..
Posto pretpostavljam da ce i ti koristi fulltext search, ako koristis binary opciju onda ti je relevance prakticno broj reci koje se matchuju. Mogao bi sa UNION da uzimas rezultate, pa da ih sortiras po relevance i tako bi prvo dobio one koji matchuju sve reci, pa sve sem jedne, itd...
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 07. 05. 2009. u 18:33. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
MySQL Database Compare - compare local and remote database | bluesman | Web aplikacije, web servisi i software | 3 | 26. 02. 2009. 15:34 |
Domain owner? Pretraga | glaspodrinja.com | Marketing i SEO | 1 | 16. 05. 2008. 10:02 |
Pretraga problem | file_get_contents | flash_back | PHP | 6 | 14. 02. 2007. 01:37 |
Pretraga po registrovanim co.yu | shoba | Web Hosting, web serveri i operativni sistemi | 7 | 29. 09. 2005. 09:39 |