Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: query full text

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    query full text

    salve e tutto il giorno che sto cercando di risolvere un problema ma non ho trovato ancora una soluzione.

    forse sarà una cosa facilissima ma non sono riuscito a risolvere questo problema.

    allora, sto facendo una ricerca full text in questo modo.

    Codice PHP:
    class Ricerca
        
    {
        var 
    $campi;
        var 
    $tabella;
        var 
    $key;
        var 
    $tuple;
         
        function 
    Ricerca($key$tabella$campi)
        {
        
    $this->key $key;
        if(
    $tabella!="")
        
    $this->tabella $tabella;
        if(
    $campi!="")
        
    $this->campi $campi;
        
    $this->pulisciStringa();
        }
         
        function 
    Query()
        {
         
    $datah time();
        
        
    $query "SELECT *, MATCH($this->campi) AGAINST('$this->key' IN BOOLEAN MODE) AS attinenza FROM $this->tabella WHERE MATCH($this->campi) AGAINST('$this->key' IN BOOLEAN MODE)  ORDER BY attinenza DESC";
    //AND dataFineTimestamp > $datah prende l'annuncio che ancora non e scaduto
         
        
    $this->tuple mysql_query($query);
         
        }
         
        function 
    pulisciStringa()
        {
        
    $keyMod strip_tags($this->key);
        
    $keyMod mysql_real_escape_string($keyMod);
        
    $this->key trim($keyMod);
        }
         
        function 
    ricercaParole()
        {

        
    $word explode(' 'trim($this->key));
        
    $num count($word);
         
        
    $i=0;
        while(
    $i$num){
        
    $word[$i] = '+'.$word[$i];
        
    $i++;
        }
        
    $this->key implode(' ',$word);
        }
         
        function 
    ricercaFrase()
        {
        
    $word $this->key;
        
    $word '"'.$word.'"';
        
    $this->key $word;
        }
         
        } 
    questa ricerca trova tutti gli annunci che hanno attinenza con la parola cercata

    ogni annuncio e associato a una categoria tramite id , i nome delle categorie sono in un altra tabella.

    vorrei che quando trova gli annunci a sinistra nella pagina escono le categorie degli annunci che ha trovato, per esempio se trova 3 annunci della categoria casa, a fianco esce una volta casa, se trova anche annunci che hanno categoria macchina, esce casa, macchina. ecc.

    io avevo pensato di fare la funzione sopra per trovare gli annunci, e poi fare una query uguale per le categorie in questo modo.

    Codice PHP:
    class categorie
        
    {
        var 
    $campi;
        var 
    $tabella;
        var 
    $key;
        var 
    $tuple;
         
        function 
    categorie($key$tabella$campi)
        {
        
    $this->key $key;
        if(
    $tabella!="")
        
    $this->tabella $tabella;
        if(
    $campi!="")
        
    $this->campi $campi;
        
    $this->pulisciStringacat();
        }
         
        function 
    Querycat()
        {
         
    $datah time();
        
        
    $query "SELECT a.*, b.categoria1,  MATCH($this->campi) AGAINST('$this->key' IN BOOLEAN MODE) AS attinenza FROM annunci a, cat1 b WHERE  MATCH($this->campi) AGAINST('$this->key' IN BOOLEAN MODE) AND a.id_cat1= b.cod_cat1 GROUP BY a.id_cat1 ORDER BY attinenza DESC";
    //dataFineTimestamp > $datah prende l'annuncio che ancora non e scaduto
         
        
    $this->tuple mysql_query($query);
         
        }
         
        function 
    pulisciStringacat()
        {
        
    $keyMod strip_tags($this->key);
        
    $keyMod mysql_real_escape_string($keyMod);
        
    $this->key trim($keyMod);
        }
         
        function 
    ricercaParolecat()
        {

        
    $word explode(' 'trim($this->key));
        
    $num count($word);
         
        
    $i=0;
        while(
    $i$num){
        
    $word[$i] = '+'.$word[$i];
        
    $i++;
        }
        
    $this->key implode(' ',$word);
        }
         
        function 
    ricercaFrasecat()
        {
        
    $word $this->key;
        
    $word '"'.$word.'"';
        
    $this->key $word;
        }
         
        } 
    solo che facendo cosi mi dice che non puo eseguire la query

    cosa sbaglio ?

    se nella query metto questa condizione id_cat1=1 funziona
    se metto id_cat1=cod_cat1 dice che non puo eseguire la query

    mi potreste aiutare. o magari se ci sono soluzioni migliori ve ne sarei molto grato

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ti sposto in database, hai problemi nel decidere come scrivere le query, quindi con MySQL, non con PHP.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    ok grazie. speriamo che qualcuno riesca a darmi una mano

  4. #4
    Quote Originariamente inviata da processore Visualizza il messaggio
    ok grazie. speriamo che qualcuno riesca a darmi una mano
    Tralasciando tutto il codice php, che non e' questa la sezione.

    Hai delle tabelle e vuoi fare una query...

    Puoi riassumerci le tabelle che hai e che query vuoi fare?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    allora,
    io ho queste tabelle:
    CATEGORIA:
    cod_cat1 (id della categoria)
    categoria1(nome della categoria)

    ANNUNCIO:
    id (id_annuncio)
    titolo
    descrizione
    id_categoria (serve per legare l'annuncio a una determinata categoria)
    eccetera

    io vorrei fare una ricerca full text sui campi titolo e annuncio

    per esempio.
    faccio la ricerca fiat punto, deve mostrarmi tutti i risultati dove o su titolo o descrizione cìè fiato punto.
    siccome i risultati possono appartenere a diverse categorie, tipo uno 10 annunci possono far parte della categoria pezzi di ricambio
    10 possono far parte della categoria modellino ecc

    io voglio stampare la categoria degli annunci.
    nel senso. sia se trova un solo annuncio o mille che fanno parte della categoria pezzi di ricambio mi deve mostrare una sola volta la categoria pezzi di ricambio cosi se voglio cercare solo pezzi di ricambio clicco li e mi cerca solo quella categoria.
    se poi ci sono modellismo, mi deve stampare sia pezzi di ricambio che modellismo ecc.

    spero di essere stato chiaro. altrimenti cerco di formulare la mia domanda in modo piu chiaro

    grazie mille

  6. #6
    se ho capito bene, puoi provare un qualcosa piu o meno cosi:

    SELECT A.titolo,C.categoria1
    FROM ANNUNCIO A JOIN CATEGORIA C ON(A.id_categoria = C.cod_cat1)
    GROUP BY(A.titolo, C.categoria1)
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    schema ricerca.jpg
    ho fatto un piccolo disegno perchè a parole non riuscivo a spiegare bene

    quello che voglio e che cercando la parola auto mi faccia una ricerca full text nei campi titolo e descrizione e prenda tutti quelli che hanno la parola auto.
    nello stesso tempo devo controllare le categorie solo degli annunci trovati e a fianco stampare solo una volta la categoria anche se per una categoria ho trovato tanti annunci. come nel disegno.

    come avev oscritto nel primo post avevo pensato di fare 2 query identiche 2 ricerche full text una per stamapre gli annunci, e un altra per stampare la categoria, solo che la seconda mi da errore.
    questa e una mia soluzione da inesperto e penso sia la peggiore .

    dammi un consiglio su quale potrebbe essere una ottima soluzione.
    grazie

  8. #8
    Avvolte e' difficile capirsi leggendo le risposte...

    Comunque vediamo se piano piano riusciamo a capirci

    Una query di questo tipo potrebbe andare bene? Se no la limiamo

    SELECT A.titolo, A.descrizione, C.categoria1
    FROM ANNUNCIO A JOIN CATEGORIA C ON(A.id_categoria = C.cod_cat1)
    WHERE A.titolo LIKE '%auto%' OR A.descrizione LIKE '%auto'
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    se fosse possibile vorrei sfruttare le potenzialità della ricerca full text della tabella myisam .

    anche perche leggendo sui forum e guide ho visto che e piu potente e meno problematico della gestione di LIKE

    come mi hai consigliato nell'altro post ho gia fatto pure la funzione per gestire la tabella annunci

  10. #10
    Quote Originariamente inviata da processore Visualizza il messaggio
    se fosse possibile vorrei sfruttare le potenzialità della ricerca full text della tabella myisam .

    anche perche leggendo sui forum e guide ho visto che e piu potente e meno problematico della gestione di LIKE

    come mi hai consigliato nell'altro post ho gia fatto pure la funzione per gestire la tabella annunci
    Quindi dando per scontato che hai creato i corretti indici full text...

    SELECT A.titolo, A.descrizione,C.categoria1
    FROM ANNUNCIO A JOIN CATEGORIA C ON(A.id_categoria = C.cod_cat1)
    WHERE MATCH (A.titolo, A.descrizione) AGAINST ('auto')
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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.