Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Sempre sul motore di ricerca

    Ho già fatto una ricerca sul forum e postato successivamente in altri post, ma non sono ancora venuto a capo del mio problema.


    Questo è il codice che ho nel search.php


    Codice PHP:
    $ricerca explode(" ",$search); 

    foreach(
    $ricerca AS $parola){ 

    $query "SELECT *, MATCH(titolo, testo) AGAINST('+$parola -asp' IN BOOLEAN MODE) as score
    FROM News
    WHERE MATCH(titolo, testo) AGAINST('+
    $parola -asp' IN BOOLEAN MODE) 
    GROUP BY id DESC"
    ;

    $result mysql_query($query$connection) OR DIE (mysql_error());

    while (
    $row mysql_fetch_assoc($result)){

    $data2 "$row[data]";
    $split_data explode("-",$data2);
    $ora2 "$row[ora]";
    $split_ora explode(":",$ora2);

    echo 
    "<tr height=20>";
    echo 
    "<td align=left valign=middle class=link_news>";
    echo 
    "<table width=98% border=0 cellspacing=4 cellpadding=0>";
    echo 
    "<tr>";
    echo 
    "<td width=5 class=link_news align=left>&raquo;</td>";
    echo 
    "<td class=testo_news align=left>[url="news.php?id_search=$row[id]><span"]$row[titolo]</span>[/url] - by <span class=link_news>$row[autore]</span> - $split_data[2]/$split_data[1]/$split_data[0]$split_ora[0]:$split_ora[1]</td>";
    echo 
    "</tr>";
    echo 
    "</table>";
    echo 
    "</td>";
    echo 
    "</tr>";

    }

    Faccio un esempio:
    Ho 2 news (escludo per ora il testo e faccio la ricerca solo sui titoli).

    1a news) titolo: News uno
    2a news) titolo: News due


    Nel motore di ricerca inserisco queste parole chiavi: "News uno".

    Lo script mi ricerca prima la parola "News" e la troverà nelle 2 news esistenti. Mi stampa quindi 2 record.
    Poi passa alla seconda parola "uno" e la troverà solo nella prima news. Mi stampa quindi 1 record.

    In totale ci saranno 3 record nella schermata finale:

    1) News uno // dove ha trovato News
    2) News due // dove ha trovato News
    3) News uno // dove ha trovato uno


    Il problema è che non riesco in nessun modo a dirgli di scartare tutti i record che sono già stati trovati nella ricerca precedente, ovvero non vorrei che stampasse ancora la prima news (numero 3).

    Come dovrei modificare il codice di sopra??

    Thx!

  2. #2
    al posto di fare più query (ne fai una per ogni parola) dovresti concatenare nella query
    OR MATCH(titolo, testo) AGAINST('+$parola -asp' IN BOOLEAN MODE)
    in modo che ti faccia una sola query

    $query = "SELECT *, MATCH(titolo, testo) AGAINST('+$parola -asp' IN BOOLEAN MODE) as score

    FROM News WHERE 1 OR "

    foreach($ricerca AS $parola)




    $query .="MATCH(titolo, testo) AGAINST('+$parola -asp' IN BOOLEAN MODE) OR ";

    $query .="GROUP BY id DESC";
    visitate http://camicio.altervista.org per caxxate varie :d

  3. #3
    Scusa il foreach sta in mezzo alla query?


    Cmq mi da parse error

    Parse error: parse error, unexpected T_FOREACH in D:\Inetpub\webs\manicomixit\search.php on line 66

  4. #4
    Non riesco a farla andare

  5. #5
    dopo vari tentativi ho trovato la soluzione!!

    ecco qui il codice:

    Codice PHP:
    $ricerca explode(" ",$search); 

    $query "SELECT * FROM News WHERE";
    for (
    $i=0;$i<count($ricerca); $i++) {
    if (
    $i>0) { $add_or "OR";}
    $query .= $add_or titolo LIKE '%$ricerca[$i]%' OR testo LIKE '%$ricerca[$i]%' ";
    }
    $query .= "GROUP BY id DESC";
    echo 
    $query;

    $result mysql_query($query$connection) OR DIE (mysql_error());


    while (
    $row mysql_fetch_assoc($result)){

    $data2 "$row[data]";
    $split_data explode("-",$data2);
    $ora2 "$row[ora]";
    $split_ora explode(":",$ora2);

    echo 
    "<tr height=20>";
    echo 
    "<td align=left valign=middle class=link_news>";
    echo 
    "<table width=98% border=0 cellspacing=4 cellpadding=0>";
    echo 
    "<tr>";
    echo 
    "<td width=5 class=link_news align=left>&raquo;</td>";
    echo 
    "<td class=testo_news align=left>[url="news.php?id_search=$row[id]><span"]$row[titolo]</span>[/url] - by <span class=link_news>$row[autore]</span> - $split_data[2]/$split_data[1]/$split_data[0]$split_ora[0]:$split_ora[1]</td>";
    echo 
    "</tr>";
    echo 
    "</table>";
    echo 
    "</td>";
    echo 
    "</tr>";

    Non ho usato il MATCH AGAIN, ma un normale WHERE LIKE concatenando ad ogni parola di ricerca aggiuntiva il "OR titolo like bla bla or testo like bla bla".
    Al primo ciclo la variabile $add_or (OR) non viene stampata, mentre solo se esistono più parole di ricerca viene stampata, cosicchè posso concatenare le parole in un'unica ricerca (evito che vengano eseguite più ricerche e che mi stampi risultati doppi).

  6. #6
    Ah c'è un "echo $query" (era una prova per vedere come stampava la query finale) che mi son dimenticato di togliere ed ora non posso modificare il post. Ignoratelo.

  7. #7
    l'unexpected T_FOREACH era dovuto al fatto che avevo dimenticato il ; alla fine di
    $query = "SELECT *, MATCH(titolo, testo) AGAINST('+$parola -asp' IN BOOLEAN MODE) as score

    FROM News WHERE 1 OR "
    ...
    visitate http://camicio.altervista.org per caxxate varie :d

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.