[ Somborski_Fantom @ 05.05.2011. 00:31 ] @
Ima bazu u kome se nalaze 2 kolone. Jedna je izvodjac duruga je pesma. I zalim da napravim pretragu kao na youtubu.
http://www.mcstojan.iz.rs/
Kucajte mcstojan u pretrazi i izbacice vam dve pesme. I sad kad pocnem kucati naziv pesme on i dalje prikazuje 2 pesme mesto 1. Kako da zadam upit?
[ Aleksandar Ružičić @ 05.05.2011. 01:15 ] @
sa fulltext searchom bi to islo ovako nekako:
Code:

SELECT *, MATCH(col1, col2) AGAINST ('sta trazis') AS relevance 
FROM tablename 
WHERE MATCH(col1, col2) AGAINST('sta trazis') 
ORDER BY relevance DESC


naravno treba ti zajednicki fulltext index na obe kolone:

Code:

ALTER TABLE tablename ADD FULLTEXT (col1, col2)


mada mislim da tebi fulltext ne treba ako radis search nad VARCHAR poljima, LIKE bi ti vrsio posao samo sto bi u tom slucaju morao da koristis OR sto nije preporucljivo (ili sam ja to samo negde procitao da OR ne ume bas da koristi indexe, u svakom slucaju ja OR izbegavam)..
[ Somborski_Fantom @ 05.05.2011. 01:25 ] @
relevance sta to znaci? (posto nisam bas predugo ne radim u php-u)

Hvala na brzom odgovoru.
[ Aleksandar Ružičić @ 05.05.2011. 01:34 ] @
relevance je naziv "kolone" koju ces dobiti u rezultatu. ne mora tako da se zove, mozes ti slobodno umesto "relevance" da pises "rezultat" ili "podudarnost".. najbolje ti je da testiras upit prvo direktno na bazi (putem mysql cli-a, phpmyadmina, heidisql-a ili nekog drugog mysql klijenta) da vidis sta dobijas kao rezultat (i da vidis da li ti je upit ispravan, tj da li radi ono sto hoces) pa tek onda da pises php kod..
[ Somborski_Fantom @ 05.05.2011. 01:44 ] @
hmm ovo mi je php kod, ne vidim nigde gresku a on mi izbaci rezultat kao gresku
Code:

    if(isset($_POST['queryString'])) {
            $queryString = $_POST['queryString'];        
            if(strlen($queryString) >0) {

                $query = "SELECT * MATCH(izvodjac, muzika) AGAINST ('$queryString%') AS relevance FROM muzika WHERE MATCH(izvodjac, muzika) AGAINST('$queryString%') ORDER BY relevance DESC";
                $result = mysql_query($query) or die("There is an error in database please contact [email protected]");
                    while($row = mysql_fetch_array($result)){
                    echo '<li onClick="fill(\''.$row['pesma'].'\');"><a href="?p='.$row['pesma'].'&i='.$row['izvodjac'].'">'. $row['izvodjac']. " - " . $row['godina_pesme'] . "-" . $row['pesma'] . '</a></li>';
      }
      }
      }
[ vatri @ 05.05.2011. 08:06 ] @
Citat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH(izvodjac, muzika) AGAINST ('mc ') AS relevance FROM muzika WHERE MATCH(izv' at line 1


Ako pogledas prvu liniju u query-ju i uporedis sa query-jem kojeg ti je Aleksandar napisao vidjeces da hvali znak "," ,vjerovatno je u tome problem.
[ Somborski_Fantom @ 05.05.2011. 16:41 ] @
Da, to je bila greska.
Ali sad mi se pojavljuje ovo
Code:
Can't find FULLTEXT index matching the column list

E sad to je verovatno ovo
Code:
ALTER TABLE tablename ADD FULLTEXT (col1, col2)

Ali kako to da ubacim u moj kod? Kao novi query ili?
[ Br@nkoR @ 05.05.2011. 16:54 ] @
Izvrši ga pomoću MySQL cli-a ili phpMyAdmina ili MySQL Workbench-a ili HeidiSQL ili nekog dr. clienta koji koristiš, a možeš i pomoću php-a
[ Somborski_Fantom @ 05.05.2011. 17:10 ] @
Jesam, ali sad mi nista ne izbacuje kao resenje.
[ vatri @ 06.05.2011. 19:02 ] @
U cemu je problem?
Jesi probao otvoriti ovu stranicu sa kodom koji si postavio i sta ispise ona?

Ako ne ispise nista idi red po red i ispisuj sa var_dump varijable i vidi jesu li u redu...
[ Somborski_Fantom @ 06.05.2011. 19:12 ] @
Pa nista ne ispisuje.
var_dump kako mislis sa tim da ispitam?
[ vatri @ 06.05.2011. 19:29 ] @
Code:

if(isset($_POST['queryString'])) {
            $queryString = $_POST['queryString'];        
            if(strlen($queryString) >0) {

                $query = "SELECT * MATCH(izvodjac, muzika) AGAINST ('$queryString%') AS relevance FROM muzika WHERE MATCH(izvodjac, muzika) AGAINST('$queryString%') ORDER BY relevance DESC";
                $result = mysql_query($query) or die("There is an error in database please contact [email protected]");
                    while($row = mysql_fetch_array($result)){
                    echo '<li onClick="fill(\''.$row['pesma'].'\');"><a href="?p='.$row['pesma'].'&i='.$row['izvodjac'].'">'. $row['izvodjac']. " - " . $row['godina_pesme'] . "-" . $row['pesma'] . '</a></li>';
      }
      }
      }


Brate moras nauciti sam otkrivat greske u kodu. Ovako nikad neces naucit programirat.

Na gornjem primjeru:

prvo mozes recimo provjeriti jel $queryString dobija pravu vrijednost. Kako to uraditi? - Poslije reda "$queryString=$_POST['queryString']" ispisaces vrijednost te varijable:
var_dump($queryString);

Ako ispise ono sto bi trebalo ispisat ides dalje. Na gornjem primjeru ispisaces u 6. liniji vrijednost $query i dobijeni ispis ces unjet u MySQL client program i vidjeti jel query vrati to sto treba. Tako ides dalje do kraja....
[ Somborski_Fantom @ 09.05.2011. 23:59 ] @
Pa dosta toga sam naucio iz gotovog koda, i po meni je tako lakse uciti.

Pokusacu sad da odradim kako si me rekao.