Pagina 7 di 7 primaprima ... 5 6 7
Visualizzazione dei risultati da 61 a 68 su 68
  1. #61
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407

    Re: ordinare risultato della query

    Originariamente inviato da Gina
    salve, ho adattato un pò di codice che ricerca gli utenti registrati al sito,
    però c'è un piccolo problema: lo script funziona benissimo, ma se come chiave
    di ricerca uso per esempio Verdi Giuseppe, come risultato mi da tutti i Verdi, tutti i giuseppe
    come volevo, ma io vorrei che i primi risultati fossere UGUALI alla chiave di ricerca,
    poi dopo tutti gli altri. E' possibile o devo rifare tt da capo?

    ecco il codice che esegue la ricerca:

    Codice PHP:
    $praticante=$_POST['praticante'];

    $sql "SELECT nome, cognome, username, email, data_reg FROM login WHERE MATCH

    (nome, cognome, username) AGAINST ('*
    $praticante*' IN BOOLEAN MODE) ORDER BY 

    cognome DESC"
    ;


    $risultato mysql_query($sql);

        if (!
    $risultato) {
            echo 
    "Fallimento nell'esecuzione della query ($sql) dal DB: " mysql_error();
            exit;
        }
        if (
    mysql_num_rows($risultato) == 0) {
            echo 
    "nessun praticante";
            exit;
        }

        while (
    $riga mysql_fetch_array($risultato))
     {

        
    $username=$riga["username"];
        
    $nome=$riga["nome"];
        
    $cognome=$riga["cognome"];
        
    $email=$riga["email"];
        
    $data_reg=$riga["data_reg"];

    echo 
    "nome: $nome
    "
    ;
    echo 
    "cognome: $cognome
    "
    ;
    echo 
    "username: $username
    "
    ;
    echo 
    "e--mail: $email
    "
    ;
    echo 
    "registrato il: $data_reg
    "
    ;
    echo 
    "**********************
    "
    ;

    E' ovvio, guarda bene la tua query: tu ordini i risultati in base al cognome.

    Devi aggiungere il campo 'pertinenza' nel select, e ordinare i risultati in base a quello.

    una roba del tipo:
    Codice PHP:
    $sql "SELECT nome, cognome, username, email, data_reg, MATCH(nome, cognome, username) AGAINST ('*$praticante*' IN BOOLEAN MODE) AS pertinenza FROM login WHERE MATCH

    (nome, cognome, username) AGAINST ('*
    $praticante*' IN BOOLEAN MODE) ORDER BY 

    pertinenza DESC, cognome DESC"

    dovrebbe darti i risultati ordinati prima in base alla pertinenza, e poi in base al cognome (per i risultati con pertinenza uguale)
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  2. #62
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    309
    che idiota che sono....

    hai perfettamente ragione, ora va alla grande!!!

    grazie mille, non sai quanto mi sei satto d'aiuto!!
    ciao e grazie ancora

  3. #63
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407

    Riesumo il 3d..

    Per un problema di escaping.

    Dunque, esempio:
    Codice PHP:
    SELECT
        a
    .id AS aid,
        
    a.nome AS anome,
        
    MATCH(a.nomeAGAINST ('*$termine*' IN BOOLEAN MODE) AS pertinenza
    FROM
        azienda a
    HAVING
        pertinenza 

    Ora, mettiamo che ho un'azienda che contiene dei punti nel nome, ad esempio una sigla tipo "N.O.M.E. Azienda & C." ma query non trova nada.

    Ho provato con un escaping semplice:
    Codice PHP:
        MATCH(a.nomeAGAINST ('*N\.O\.M*' IN BOOLEAN MODE) AS pertinenza 
    ma niente.

    Dal manuale si parla della funzione ESCAPE ma credo non si possa utilizzare all'interno del AGAINST..

    Idee?
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  4. #64
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #65
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da Grino















    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  6. #66
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    87
    Qui c'è scritto:

    codice:
    *+$citta_annuncio* *+$regione_annuncio* *+$categoria_annuncio* *+$parola_annuncio*
    io ho una query di questo tipo

    Codice PHP:
    $query_cerca_annunci mysql_query("SELECT annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria, annunci_attivi.prezzo, utenti.citta, utenti.regione, 
                MATCH(utenti.citta, utenti.regione, annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria)     
                AGAINST('+
    $citta_annuncio +$regione_annuncio +$categoria_annuncio +$parola_annuncio' IN BOOLEAN MODE)     
                as score FROM annunci_attivi     
                INNER JOIN utenti ON annunci_attivi.id_utente = utenti.id    
                WHERE MATCH(utenti.citta, utenti.regione, annunci_attivi.titolo, annunci_attivi.descrizione, annunci_attivi.categoria)         AGAINST('+
    $citta_annuncio +$regione_annuncio +$categoria_annuncio +$parola_annuncio' IN BOOLEAN MODE) ORDER BY score DESC"); 
    ed anche se $categoria_annuncio non è presente in nessun campo mi da dei risultati come è possibile dove sbaglio?

  7. #67
    Originariamente inviato da luigi.84
    non ho capito quello che hai scritto nel primo caso, nel secondo mi pare di capire che ti riferisci alla select innestata, che però non mi va

    Codice PHP:
    $sql "SELECT COUNT(*) AS totale FROM articoli WHERE id IN (SELECT *, MATCH($this->fulltext
    AGAINST('*
    $this->key*' IN BOOLEAN MODE) AS tot FROM categorie I INNER JOIN articoli C on I.id_cat = C.categoria  
    WHERE MATCH(
    $this->fulltext) AGAINST('*$this->key*' IN BOOLEAN MODE) 
    ORDER BY tot DESC) GROUP BY id"

    mi restituisce questo errore (che non avevo mai visto ) Operand should contain 1 column(s)
    dovrebbe significare che il COUNT() deve contenere un attributo almeno ( * non è considerato attributo a quanto apre)

  8. #68
    Ottima pillola

    Per ricercare su due tabelle indipendeti faccio così


    //parametri di ricerca
    var $fulltext = "titolo,testo";
    var $table = "dati";
    var $table1 = "domande";
    ....
    ...
    ...
    $sql = "SELECT *, MATCH($this->fulltext) AGAINST('*$this->key*' IN BOOLEAN MODE) AS tot FROM $this->table WHERE MATCH($this->fulltext) AGAINST('*$this->key*' IN BOOLEAN MODE) ORDER BY tot DESC
    UNION
    SELECT *, MATCH($this->fulltext) AGAINST('*$this->key*' IN BOOLEAN MODE) AS tot FROM $this->table1 WHERE MATCH($this->fulltext) AGAINST('*$this->key*' IN BOOLEAN MODE) ORDER BY tot DESC";



    mi da errore dove sbaglio?

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.