motore di ricerca

ho voglia di inserire un mini motore diricerca con query personalizzabile nel mio sito

deve cercare nella tabella annunci con la query composta in base a dei select dell'utente ... per la query xsonalizzata non credo di aver problemi ma non so come effettuare la ricerca [se basta solo la query o devo usare funzioni varie] e come mostrare i risultati ... non mi aspetto che posti codice gianni ma solo che tu mi dia dei consigli

grazie :)

inviato 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Le ricerche in MySQL si possono fare in 2 modi: usando la sintassi

SELECT ... WHETE campo LIKE "%termine_da_cercare%"

oppure usando le "full text search" (più difficili da usare)

Nel primo caso non hai bisogno di fare nulla di particolare, si tratta di effettuare una semplice SELECT e di mostrare i risultati

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quindi

SELECT * FROM `annunci` 

WHERE `descrizione`  LIKE "%$termine1%",  "%$termine2%" ,  "%$termine3%" 

esatto?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
modificato 10 anni fa
X 0 X

mi sa che al posto della virgola dovresti usare degli OR

nome_campo LIKE ... OR nome_campo LIKE ...

comunque per queste cose conviene consultare il manuale ufficiale di MySQL

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
'SELECT * FROM `annunci` 

WHERE `descrizione`  LIKE "%$termine1%" OR "%$termine2%" OR  "%$termine3%"  ';

per collegare le variabili alle query devo usare . vero?

'SELECT * FROM `annunci` 

WHERE `descrizione`  LIKE "%'.$termine1.'%" OR "%'.$termine2.'%" OR  "%'.$termine3.'%"  ';

esatto?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

per ogni like devi ripetere il nome del campo

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ah cavolo davvero?

quindi posso fare

'SELECT * FROM `annunci` 

WHERE `descrizione`  LIKE "%'.$termine1.'%" OR  `descrizione` LIKE "%'.$termine2.'%" OR  `descrizione` LIKE "%'.$termine3.'%"  ';

e cercare in + campi nella stessa query?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

 O0

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ho fatto questa query :

<?php    

        

        $loco  = $_POST[loco];

        $posti = $_POST[posti];

        $altro = $_POST[altro];

        $genere = $_POST[genere];

           

      $query = 'SELECT * FROM `annunci` WHERE 

      `descrizione` LIKE "%'.$altro.'%" OR

      `genere` LIKE "%'.$genere.'%" OR  

      `localita` LIKE "%'.$loco.'%"  OR

      `posti` LIKE "%'.$posti.'%"';

      $select = mysql_query($query);   

      $data = mysql_fetch_array($select); ?>

 

ma seleziona sempre tutto indifferentemente dai dati inseriti  nei form

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

per debuggare una query "dinamica" conviene per prima cosa farsi mostrare dallo script la query che realmente si sta per eseguire. Un echo $query; è sufficiente.

Usando poi un client MySQL (ad esempio phpMyAdmin) si può poi eseguire "a mano" la query ottenuta e modificarla fino ad ottenere l'esito voluto.

P.S.: metti gli apici agli indici dell'array $_POST

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

$query mi da questo :

SELECT * FROM `annunci` WHERE

      `descrizione` LIKE "%%" OR

      `genere` LIKE "%appartamento%" OR 

      `localita` LIKE "%torresuda%"  OR

      `posti` LIKE "%1%" AND attivo='S' AND disponibile='S'

il primo è vuoto di default cmq come printo quello che trova invece di printare tutto?

prim a ho usato questo pre printare

<?php       

      while ($data = mysql_fetch_array($select))

      {

      $descrizione = substr($data[descrizione],0,255);

      echo '<table width="740" border="0" cellspacing="3" cellpadding="3">

            <tr>

              <td colspan="2"class="tr" align="right">.................................................................................................................................................................................................................................................</td>

              </tr>

            <tr>

              <td width="370" rowspan="6" align="right"><img name="" src="', $data[foto],'" width="320" height="250" alt="" class="foto"></td>

              <td width="370" class="show_other"><strong class="show_info">', $data[titolo], '</strong></td>

              </tr>

            <tr>

              <td class="show_other"><strong>Tipo : </strong><strong class="show_info"> ', $data[genere], '</strong></td>

            </tr>

            <tr>

              <td class="show_other"><strong>Descrizione :</strong></td>

            </tr>

            <tr>

              <td class="show_other">', $descrizione,"... ", '</td>

            </tr>

            <tr>

              <td class="show_other"><strong>Localit&agrave; : </strong><strong class="show_info">', $data[localita], '</strong></td>

            </tr>

         <tr>

              <td class="show_other"><p>Prezzo (media stagione) :',$data[prezzo_media],'<span class="asterisk"> **</span></p><p>

          <div id="info"><a href="show.php?id=',$data[annuncio_id],'">guarda la scheda di ', $data[titolo],'</a></div></p></td>

            </tr>

            <tr>

              <td colspan="2" class="tr" align="right">.................................................................................................................................................................................................................................................</td>

              </tr>

          </table>';

        }

   ?>

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Il problema della query adesso dovrebbe essere chiaro. Se un campo non viene riempito la query produce un: LIKE '%%' che tradotto significa "dove il campo può contenere qualsiasi cosa". Ecco perché ricevi tutti i risultati comunque.

Devi quindi provecere in maniera diversa per la costruzione della query dinamica. Ad esempio:

$loco  = $_POST['loco'];

$posti = $_POST['posti'];

$altro = $_POST['altro'];

$genere = $_POST['genere'];

$condizioni = array();

$query = "SELECT * FROM annunci WHERE ";

if($loco) $condizioni[] = "localita LIKE '%$loco%'";

if($posti) $condizioni[] = "posti LIKE '%$posti%'";

// ... lo stesso per le altre variabili ...

$stringa_condizioni = implode(" OR ", $condizioni);

$query .= $stringa_condizioni . "AND attivo='S' AND disponibile='S'";

il codice è da controllare, non l'ho provato.  :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quel codice serve a costriure la query vero?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Si, provalo e come prima metti un echo $query alla fine per sapere che query ha lanciato effettivamente.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ok lo sto ampliando per correggere gli errori che commette [località errate posti errati ecc]

se il campo lascio QUALSIASI [che sarebbe "%%" $_POST è vuoto] non mi mostra nulla :(

e se volessi mettere il numero di risultati trovati?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
modificato 10 anni fa
X 0 X
se il campo lascio QUALSIASI [che sarebbe "%%" $_POST è vuoto] non mi mostra nulla :(

infatti il codice che ti ho proposto non inserisce nella query la condizione su un campo quando questo viene lasciato vuoto. Il problema che avevi prima (ottenevi sempre tutti i risultati) era causato proprio da questo.

Se però stai facendo delle ricerche probabilmente nella query agli OR devi sostituire degli AND. Infatti tu vuoi che i risultati soddisfino tutti i criteri di ricerca, non almeno uno, giusto?

Stai attento inoltre che il codice che ti ho suggerito produce una query errata se non viene inserito nessun dato dall'utente.

e se volessi mettere il numero di risultati trovati?

c'è la funzione mysql_num_rows() che lo restituisce.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

si gianni ora funziona ho risolto :D.

GRAZIE MILLE

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda