[ pijavica. @ 29.01.2014. 20:59 ] @
Pozdrav svima. Imam 2 problema

1 problem:
Da li mozete da mi objasnite sta je najbolje da se stavi na sajtu za pretragu artikla: Live search (koji ce automatski da izlista artikle) ili obican search kada se klikne dugme search pokaze rezultat pretrage.
Ne znam da li (mysql baza) na serveru sa live search, moze da pretrazi vise od 100 000 artikala veoma brzo.

Sta vi preporucujete da se uradi.


2 problem:

Nasao sam jednu skriptu za Live search malo je modifikovao samo imam jedan problem.
U tabeli Article imam kolonu Active

Ne znam kako da uradim kada se vrsi pretraga da proveri kolonu Active i ako je tamo primer: True (ili ne bitno broj 1). Onda da prikaze u pretragu taj artikal koji je aktivan.
A u slucaju da u koloni Active stoji primer: False (ili broj 0). Onda da neprikaze u rezultat pretrage taj artikal posto nije aktivan.

Kako to da uradim. Izpod teksta postavio sam kod kako izgleda Live search.

Hvala vam puno na pomoci.



Code:

<?php 
error_reporting( 0 );

include 'core/init.php';

echo "<div class=\"searchText\">Search</div><hr />";
//PAGE NUMBER, RESULTS PER PAGE, AND OFFSET OF THE SEARCH RESULTS
if($_GET["page"]) {
    $pagenum = $_GET["page"];
    } else {
         $pagenum = 1;
    }

$rowsperpage = 2;
$offset = ($pagenum - 1) * $rowsperpage;

//SEPARATES THE ENTIRE SEARCH TERM INTO KEYWORDS
$t = trim(eregi_replace(" +", " ", $_GET["q"]));
$x = explode(" ", $t);

foreach($x as $z) {
    $w++;
    if($w==1) {
         $u .= "keywords LIKE '%$z%'";
    } else {
         $u .= "AND keywords LIKE '%$z%'";
    }
}

$q = mysql_query("SELECT * FROM article WHERE $u ORDER BY id DESC LIMIT $offset, $rowsperpage");
$page_nums = mysql_num_rows($q); //NUMBER OF RESULTS FOR THE PAGE

//QUERY FOR ALL RESULTS OF THE SEARCH
$total_q = mysql_query("SELECT * FROM article WHERE $u");
$total_nums = mysql_num_rows($total_q); //TOTAL NUMBER OF RESULTS
echo "$total_nums results found !<p>";
$total_pages = ceil($total_nums/$rowsperpage); //NUMBER OF PAGES

//IF THERE ARE RESULTS
if($total_nums) {
    if($pagenum<1||$pagenum>$total_pages) {
        header("Location: results.php?q=$t");
    }
    
        while($r= mysql_fetch_assoc($q)) {
        $name = $r['name_article'];
        $info = $r['info_article'];
        $datum = $r['datum'];
           
        echo "<div class='wellcatalog'>
                <div class='width: 400px;'>
                    <div class='title'><a href=''><b>$name</b></a></div>
                    <div class='url'>$info</div>
                    <div class='desc'>$datum</div>
                </div>
            </div>
    
        ";
            
        }
    echo '
        <div class="pagination">
            <ul>';
                           $range = 7;    if($pagenum>1) {
                            $page = $pagenum - 1;
                             $first = '<li class="previous"><a class="page" id="1">First <img src="images/tile/previous.png" height="20" width="20"></a> </li> ';
                        }
    
    //IF NOT ON THE LAST PAGE OF RESULTS
    if($pagenum<$total_pages) {
        $page = $pagenum + 1;
         $next = '<li class="next"><a class="page" id="'.$page.'"><img src="images/tile/next.png" height="20" width="20"> last</a></li> ';
     }
    
    for($page=($pagenum-$range); $page<=($pagenum+$range); $page++) {
        if($page>=1&&$page<=$total_pages) {
            if($total_pages>1) {
                if($page==$pagenum) {
                    $nav .= '<li class="active"><span class="pagenum">'.$page.'</span> </li>';
                    } else {
                         $nav .= '<li><a class="page" id="'.$page.'">'.$page.'</a> </li>';
                    }
                }
            }
        }
        echo $first . $nav . $next; //  . $prev  . $last
        echo '    
              </ul>
        </div>';
      } else {
           echo "Sorry, there are no matching result for <b>$t</b>.</br></br>1. 
                    Try more general words.</br>2. Try different words with similar
                     meaning</br>3. Please check your spelling";
          }

?>
 
[ Jbyn4e @ 29.01.2014. 21:35 ] @
1) Zavisi od baze i strukture tabela. Probaj pa vidi. Indexi su bitni.
2) Staviš "AND Active=1" u sql upit. Pre toga napraviš index tabele sa ključem na Active i keywords (valjda tako nekako, naći će se neko da pojasni ko zna bolje).

Takođe mi se čini da su ti upiti preobimni, ne znam zašto iz tabela tražiš * a ne samo ono što ti treba? Ostalo nisam ni stigao da obratim pažnju...
[ pijavica. @ 30.01.2014. 09:29 ] @
Hvala Jbyn4e,

resio sam problem 2.
Citat:
Takođe mi se čini da su ti upiti preobimni, ne znam zašto iz tabela tražiš * a ne samo ono što ti treba? Ostalo nisam ni stigao da obratim pažnju...

Sto se tice zvezdice inace u tabeli article koristim 5 kolone i njih sam stavio umesto zvezdice.



Sto se tice problema 1. Kada vrsim pretragu na Localhost radi bez problema. Samo na znam kako bi se ponasao na serveru.

Ali prema vasim iskustvima da li je najbolje: Live search (koji ce automatski da izlista artikle) ili obican search kada se klikne dugme search pokaze rezultat pretrage.

Hvala vam
[ plus_minus @ 30.01.2014. 10:17 ] @
Običan. Baš kao na ES i na zilion drugih sajtova i foruma. Rezultat posle klika na dugme. Server će ti biti višestruko zahvalan na toj odluci.
[ pijavica. @ 30.01.2014. 12:40 ] @
Hvala puno plus_minus and Jbyn4e na pomoc.