Problemi motore di ricerca

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ciao a tutti, sto cercando di creare un motore di ricerca in full text per un sito di agenzia immobiliare che ha annunci si di vendita e di fitti ma ho riscontrato due problemi che proprio non riesco a risolvere per questo chiedo gentilmente aiuto agli esperti, la tabella nel database si chiama annunci ed e' cosi' formata:
Codice:
CREATE TABLE `annunci` (
  `idannuncio` int(11) NOT NULL AUTO_INCREMENT,
  `localita` varchar(200) NOT NULL,
  `bagni` text NOT NULL,
  `camere` text NOT NULL,
  PRIMARY KEY (`idannuncio`),
  FULLTEXT KEY `localita` (`localita`,`bagni`,`camere`)
) ENGINE=MyISAM


Questo e' il form:
Codice:
<form  method="post" action="cerca-annunci.php">
                                    <div class='widget-section'>
                                        <div class='inner'>
                                            <label for="location">Località</label>
                                            <input type="text" name='localita' id='location' class='input-block-level' placeholder="es. Ischia Porto, Casamicciola"/>
                                        </div>
                                    </div>
                                    <div class='widget-section'>
                                        <div class='inner'>
                                            <label for="propertyType">Numero Camere</label>
                                            <input type="text" name='camere'  class='input-block-level' placeholder="es. 1,2,3"/>
                                        </div>
                                    </div>
                                    <div class='widget-section'>
                                        <div class='inner'>
                                            <label for="bedrooms">Numero Bagni</label>
                                            <input type="text" name='bagni'  class='input-block-level' placeholder="es. 1,2,3,"/>
                                        </div>
                                    </div>
                                    
                                    <section class='widget-buttons'>
                                        <div class='inner'>
                                            <button type="submit" class='btn btn-primary btn-large btn-block'><i class="icon-search icon-white"></i> CERCA</button>
                                    
                                </form>

il codice e' questo:
PHP:
<?
		
//recupero i valori via post dal precendete form di ricerca
$localita = $_POST['localita'];
$camere = $_POST['camere'];
$bagni = $_POST['bagni'];

//inizio il loop
require_once("config.php");  //connessione db

mysql_select_db("$db_name",$connessione); 

//verisone più avanzata
$risultato = mysql_query("SELECT *, MATCH(localita, camere, bagni) AGAINST('$localita, $camere, $bagni') as score
		FROM annunci
		WHERE MATCH(localita, camere, bagni) AGAINST('$localita, $camere, $bagni')
		ORDER BY score ASC");
		
		//in caso di errore
			if (!$risultato) {

					exit ('<p> Errore mentre recuperavo i dati' . mysql_error() . '</p>');
			}

if (mysql_num_rows($risultato) == 0) {
echo '<table align="center" class="clear" cellpadding="4" cellspacing="0" border="0" width="100%">';
	echo '<td align=center class="require">NON CI SONO ANNUNCI INSERITI! RIPROVA LA RICERCA</td>';
	 echo '</table>';
			
		} else

while ($row = mysql_fetch_array($risultato))   

		{

//stampo risultati a video come siete abituati
?>
il primo problema sta che se cerco ad esempio la località roma ed aggiunco il mumero delle camere e dei bagni la ricerca e' vuota se metto invece solo la località mi trova i risultatisia per gli annunci dei fitti che delle vendite, l'altro problema invece e' che se tengo la localita' roma per fitti e vendite non mi trova niente: Ragazzi vi chiedo aiuto perche non riesco proprio ad uscirne fuori.
Grazie
 

skillsfactory

Utente Attivo
23 Nov 2012
50
0
0
Nota bene, il metodo MATCH/AGAINST restituisce risultati solo se la tabella ha almeno un certo numero di record... di solito almeno cinque..
Tuttavia non credo sia il tuo caso (ma per sicurezza, se poco popolato, aggiungi qualche record alla tabella in fase di sviluppo giusto per tranquillità).

Poi perchè bagno e camere sono dei "text"? cosa contengono?


ho notato che non hai un feddback nel caso in cui la query fallisca... sicuro che non sia un problema di codice? prova a d aggiungere:
PHP:
//verisone più avanzata
$risultato = mysql_query("SELECT *, MATCH(localita, camere, bagni) AGAINST('$localita, $camere, $bagni') as score
        FROM annunci
        WHERE MATCH(localita, camere, bagni) AGAINST('$localita, $camere, $bagni')
        ORDER BY score ASC") or die( mysql_error() );
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ciao grazie per la risposta, ho provato a modificare come mi hai sugerito m purtroppo la ricerca continua a non funzionare, le doppie località non me le visualizza e se inserisco la quantità di camere o bagni nel form stessa storia proprio non capisco, cmq nella tabella mysql la riga bagni e camere contiene in numero(es. 2) la quantità di camere o bagni disponibili
 

skillsfactory

Utente Attivo
23 Nov 2012
50
0
0
ciao allora, ricapitolando..

localita: contiene il nome di una citta, quindi un varchar(50) va più che bene
camere: contiene un numero, quindi sarebbe meglio impostarlo ad int
bagni: vedi camere

usare MATCH/AGAINST non ha senso... avrebbe senso solo per ricerche all'interno di testi (stile Google)

la tabella diventa quindi


Codice:
CREATE TABLE `annunci` (
  `idannuncio` int(11) NOT NULL AUTO_INCREMENT,
  `localita` varchar(50) NOT NULL,
  `bagni` int(11) NOT NULL,
  `camere` int(11) NOT NULL,
  PRIMARY KEY (`idannuncio`),
  INDEX `localita` (`localita`), 
  INDEX `bagni` (`bagni`), 
  INDEX `camere` (`camere`), 
) ENGINE=InnoDB


a questo punto ti basta una più classica, ma nel tuo caso molto più efficace:

PHP:
$slq = "SELECT * FROM annunci WHERE localita like '%s' AND camere >= %d AND bagni >= %d";
$query = sprintf($slq, mysql_real_escape_string($localita), (int)$camere, (int)$bagni);
$risultato = mysql_query($query) or die( mysql_error() );
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ho provato a creare la tabella come mi hai suggerito ma mi da questo problema:
Codice:
#1064 - 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 ') ENGINE=InnoDB' at line 10
qualche idea?
Grazie

Edit: problema risolto cera una virgola su l'ultima riga di codice :)
 
Ultima modifica:

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Provato ma la query non mi restituisce nessun risultato, continua ad uscirmi il messaggio impostato in caso che non trova annunci, in realta e' pienori annunci credo ce' qualcosa nella query che non va
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ok lo script funziona il problema sta che ho aggiunto altre colonne nella tabella e non funziona piu adeso la tabella annunci e' così:
Codice:
CREATE TABLE `annunci` (
  `idannuncio` int(11) NOT NULL AUTO_INCREMENT,
  `localita` varchar(50) NOT NULL,
  `tipologia` text NOT NULL,
  `tipo` text NOT NULL,
  `stato` text NOT NULL,
  `descrizione` text NOT NULL,
  `destinazione` text NOT NULL,
  `prezzo` text NOT NULL,
  `note` text NOT NULL,
  `cucina` varchar(200) NOT NULL,
  `bagni` int(11) NOT NULL,
  `camere` int(11) NOT NULL,
  `terrazza` text NOT NULL,
  `balcone` text NOT NULL,
  `auto` text NOT NULL,
  `ordine` text NOT NULL,
  `agente` text NOT NULL,
  `tel` text NOT NULL,
  PRIMARY KEY (`idannuncio`),
  KEY `localita` (`localita`),
  KEY `bagni` (`bagni`),
  KEY `camere` (`camere`)
) ENGINE=InnoDB ;

pero' per la ricerca mi servono solo camere, bagni, località non capisco dove sta' il problema!!
Grazie
 
Ultima modifica:

skillsfactory

Utente Attivo
23 Nov 2012
50
0
0
perchè metti a tutti text se sono dei varchar... inizia con il farti una bella lettura del giusto utilizzo dei tipi di stringhe http://dev.mysql.com/doc/refman/5.0/en/string-types.html


poi scusa, se lanci questo codice che ti esce?

PHP:
$localita = 'roma';
$camere = 0;
$bagni   = 0;

$slq = "SELECT * FROM annunci WHERE localita like '%s' AND camere >= %d AND bagni >= %d";
$query = sprintf($slq, mysql_real_escape_string($localita), (int)$camere, (int)$bagni);
 
echo $query;

$risultato = mysql_query($query) or die( mysql_error() ); 

if ( mysql_num_rows($risultato) > 0) 
{
        while ($row = mysql_fetch_array($risultato))   
        {
               print_r($row);
         }
}
else
{
       echo 'non ci sono risultati';
}
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Adesso provo il codice che mi hai dato cmq se scrivo la tabella come tu mi hai suggerito funziona alla grande ma quando la modifico come ho scritto sopra non tra piu' i risultati
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ciao allora ho provato il codice che mi hai dato ho anche inserito un annuncio con località "roma" e questo e' il messaggio che i da:
Codice:
SELECT * FROM annunci WHERE localita like 'ischia' AND camere >= 0 AND bagni >= 0non ci sono risultati
pero' ripeto con la tabella da te suggerita funziona e con quella mia che nn va devo cambiare da txet in varchar per farlo funzionare?
Grazie

Edit: ho cambiato da text a varchar(50) tutte le righe ma niente da fare non va
 
Ultima modifica:

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Scritta in quel modo se hai le città con il nome maiuscolo come ad esempio Ischia e tu cerchi ischia allora non te la trova.
 

skillsfactory

Utente Attivo
23 Nov 2012
50
0
0
allora fai così

PHP:
$localita = 'Ischia';
$camere = 0;
$bagni   = 0;

$slq = "SELECT * FROM annunci WHERE LOWER(localita) like '%s' AND camere >= %d AND bagni >= %d";
$query = sprintf($slq, mysql_real_escape_string(strtolower($localita)), (int)$camere, (int)$bagni);
 
echo $query;

$risultato = mysql_query($query) or die( mysql_error() ); 

if ( mysql_num_rows($risultato) > 0) 
{
        while ($row = mysql_fetch_array($risultato))   
        {
               print_r($row);
         }
}
else
{
       echo 'non ci sono risultati';
}
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Problemi Motore di RICERCA INTERNA NEL SITO Javascript 0
N php problemi a visualizzare video PHP 3
T problemi con dati menu a tendina HTML e CSS 2
T problemi di connessione MySQL 2
M Upload immagine con javascript problemi con FormData() Javascript 1
F Problemi visualizzazione mappa Android studio Sviluppo app per Android 0
S Problemi Javascript + Aruba Javascript 2
A Problemi con move_uploaded_file PHP 7
M Problemi con la stampa dei valori in php PHP 1
L Problemi con il login PHP 2
L Problemi form Pagina php HTML e CSS 3
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Z problemi con foreach insert into PHP 10
B javascript per problemi con pdf e Safari Javascript 0
N Problemi kit videosorveglianza IP Cam e Videosorveglianza 0
M Problemi con creazione maschere Presentati al Forum 1
M Problemi con query a più tabelle PHP 3
R Problemi anomalo insermento in db PHP 9
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
S Problemi di un principiante PHP 3
M Problemi con blog Grav CMS (Content Management System) 0
F Problemi di visualizzazione di un sito su più browser WordPress 0
S Problemi di visualizzazione form contatti sito web HTML e CSS 2
S incoerenza di stampa. problemi con il magenta Photoshop 3
A problemi con paypall Java 1
A Problemi di accesso da remoto a Ipcam IP Cam e Videosorveglianza 5
michele81 [WordPress] problemi plug meteo api key WordPress 4
E Problemi in registrazione telecamere Dahua IP Cam e Videosorveglianza 6
S Problemi con modulo upload video php (help!) PHP 0
felino [Windows 8.1] Problemi con connessione WiFi Windows e Software 0
M [PHP] Problemi su inserimento array nel db PHP 7
E [PHP] problemi nuova riga con fwrite su piattaforma android PHP 5
M [PHP] Problemi di salvataggio su campo calcolato PHP 0
O [HTML] problemi con la regola "background-attachment: fixed" in EDGE HTML e CSS 0
M [PHP] Problemi con query unione PHP 11
M [PHP] Problemi con select PHP 6
Spown [WordPress] Problemi visualizzazione su più browser + voci menu in movimento WordPress 1
ANDREA20 [HTML] problemi con il footer HTML e CSS 1
D [MS Access] problemi con inserimento campo in una maschera MS Access 6
M [PHP] Problemi con il riconoscimento login. PHP 21
A [WordPress] problemi con xampp WordPress 2
M Problemi con database Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1 PHP 6
P Problemi comunicazioni Comunicazioni dallo Staff 8
G I problemi non vengono solo per nuocere Presentati al Forum 0
A Problemi Wi-Fi Fastweb Reti LAN e Wireless 4
C [WordPress] Url vulnerability e problemi sito da mobile WordPress 0
S [PHP] problemi con le sessioni PHP 3
B Problemi accesso Instagram Smartphone e tablet 1
T [PHP] problemi con il browser PHP 0
M [Flash] Problemi conversione formato swf Flash 20

Discussioni simili