Novo

Forum kao aplikacija na telefonu

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

  • 8 odgovora
  • 4.569 pregleda

Najnovija ↓

Kako napraviti malo lepsu pretragu? 23.10.2014. u 01:25 · pre 146 meseci
izmenjeno 1 put, poslednji put Jorgovan88 23.10.2014. u 01:40
  1. Jorgovan8823.10.2014. u 01:40zapis iz teksta poruke
#1
Da li bi neko mogao da mi objasni kako da napravim lepsu pretragu na sajtu... Trenutno mi ova linija obavlja tu funkciju medjutim nisam zadovoljan

Code:
mysql_query("SELECT * FROM articles WHERE title LIKE '%".$query."%' ORDER BY id DESC LIMIT 50");


Znaci ovaj kod vraca 50 stvari iz baze ali meni trebaju drugaciji rezultati... za primer uzecemo ovaj naslov

Citat:
Kako napraviti malo lepsu pretragu?



Ukoliko je kljucna rec "Kako napraviti" onda ce ova tema izaci u pretrazi ali ako je kljucna rec "Kako napraviti pretragu" onda se nece pojaviti.... Hocu da kazem da bi trebao mozda neki explode da radim pa da pretrazujem valjda...
treba valjda da brojim koliko ima reci i onda da pretrazim za prvu rec pa od tih rezultata pretrazujem drgu i tako ce biti sve manje i manje rezultata i na kraju dobijemo konacni rezultat...

tnx
Potpis
https://isyoutubedown.com/
Re: Kako napraviti malo lepsu pretragu? 23.10.2014. u 08:08 · pre 146 meseci #2
ovako nekako
Code:

            $where = "";
            $queries = explode (" ", $query);
            foreach ($queries as $value)
            {                
                if($where != "")
                {
                    $where .= " OR \n";
                }
                $where .= " title LIKE '%" . $value . "%' ";
            }
            if($where != "")
            {
                $where = " WHERE \n" . $where;
            }
            mysql_query("SELECT * FROM articles " . $where . " ORDER BY id DESC LIMIT 50");

naravno ovde nisam obraćao pažnju na SQL injection
Potpis
http://www.knjigaimena.com
Re: Kako napraviti malo lepsu pretragu? 23.10.2014. u 08:27 · pre 146 meseci #3
PS
da bi ovo bolje radilo moraš napraviti i drugačije rangiranje.
Zašto?
Npr:
"Kako napraviti dobru a lijepu pretragu"
Ovo slovo "a" će vratiti sve naslove koji u sebi sadrže to slovo. Možeš da izbacuješ riječi npr koje su kraće od 3 karaktera ili da formiraš neki
rejting koji bildaš zajedno sa wherom u foreach petlji
Code:

                $rating .= "\n+CASE";
                $rating .= "\n    WHEN title LIKE '" . $value . "%' THEN 1000"; //Poeni ako naslov počinje sa
                $rating .= "\n    WHEN title LIKE '% " . $value . "%' THEN 950"; //Poeni ako naslov sadrži term sa spejsom ispred
                $rating .= "\n    WHEN title LIKE '%." . $value . "%' THEN 900"; //Poeni ako naslov sadrži term sa tačkom ispred
                $rating .= "\n    WHEN title LIKE '%?" . $value . "%' THEN 900"; //Poeni ako naslov sadrži term sa upitnikom ispred
                $rating .= "\n    WHEN title LIKE '%!" . $value . "%' THEN 900"; //Poeni ako naslov sadrži term sa uskličnikom ispred                
                $rating .= "\n    WHEN title LIKE '%," . $value . "%' THEN 900"; //Poeni ako naslov term sa zarezom ispred
                $rating .= "\n    WHEN title LIKE '%-" . $value . "%' THEN 850"; //Poeni ako naslov term sa minusom ispred
                $rating .= "\n    WHEN title LIKE '%!_" . $value . "%' ESCAPE '!'  THEN 850"; //Poeni ako naslov sadrži term sa donjom crtom ispred
                $rating .= "\n    WHEN title LIKE '%" . $value . "%' THEN 510"; //Poeni ako naslov sadrži term bilo gdje u sebi
                $rating .= "\n    ELSE 0"; //bez poena
                $rating .= "\nEND * " . strlen($value); //množimo sa dužinom riječi da bi duže riječi imale više poena

i na kraju to dodamo u upit
Code:

            if($rating != "")
            {
                $rating = " ORDER BY " . $rating ;
            }
            mysql_query("SELECT * FROM articles " . $where . $rating . " LIMIT 50");
Potpis
http://www.knjigaimena.com
Re: Kako napraviti malo lepsu pretragu? 23.10.2014. u 11:23 · pre 146 meseci #4
Koristi FULL TEXT search. Evo lepog objašnjenja: http://devzone.zend.com/26/using-mysql-full-text-searching/

I naravno, uvek korisna MySQL dokumentacija: http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Kako napraviti malo lepsu pretragu? 24.10.2014. u 14:32 · pre 146 meseci #6
Ja bih dodao jos jednu tabelu slicnih fraza i reci.
Recimo ako je 'Kako napraviti pretragu' mozda neko kuca 'Kako napraviti pretragE' ili 'pravljenje pretrage'.
Rezultate bih redjao po ovom redu:
'Kako napraviti pretragu',
'Kako napraviti pretrage',
'napraviti pretragu',
'napraviti pretrage',
'pravljenje pretrage'
'pretragu',
'pretrage',
'napraviti'
'pravljenje',
'praviti'.......

Znaci u napravio bih tabelu slicnih fraza i reci i sve to bih ukljucio u pretragu.
U ovom slucaju logicno je da rec pretraga ima najvecu tezinu pa napraviti pa tek onda kako.
Prvo bih trazio najdruze fraze i njene slizne fraze. pa bih onda trazio najveci moguci broj koji daje kombinacija reci sa najvecom tezinom i tako smanjivao prvo kombinaciju tezine
pa tek onda smanjivao kombinaciju duzine.
Ja sam sa ovim najvise bio zadovoljan.

Na kraju kada sve to napravis i vidis da nije idealno i da admini ne unose logicno podatke i nemaju inspiraciju onda uzmes za 5 minuta ugradis google search plugin za tvoj sajt.
Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
Re: Kako napraviti malo lepsu pretragu? 24.10.2014. u 20:40 · pre 146 meseci #7
Ili naučiš regularne izraze i osnove leksema, infleksija i derivacija reči, i onda umesto glomaznih tabela i algoritama sve rešiš daleko efikasnije...
Re: Kako napraviti malo lepsu pretragu? 24.10.2014. u 22:00 · pre 146 meseci #9
Citat:
valjan:
Ili naučiš regularne izraze i osnove leksema, infleksija i derivacija reči, i onda umesto glomaznih tabela i algoritama sve rešiš daleko efikasnije...


Da je tako onda bi i google tako radio a to mozes jednostavnim testom da utvrdis.

Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme