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

    Problema con query INNER e MATCH

    E' da poco che mi cimento con le query e sono giorni che mi sono bloccata.

    Ho un database con sei tabelle:
    1) nome tabella: fondo campi: id_fondo nomefondo
    2) nome tabella: genere campi: id_genere gen
    3) nome tabella: dedica campi: id_dedica dedicamarone
    4) nome tabella: autore campi: id_autore nome_aut cognome_aut
    5) nome tabella: edizione campi: id_edizione luogo anno editore
    6) nome tabella: libri campi: id id_fondo id_genere id_autore id_edizione titolo id_dedica nota

    Ed io ho impostato la SELECT in questo modo:

    SELECT libri.titolo, libri.nota,
    autore.nome_aut, autore.cognome_aut,
    edizione.editore, edizione.luogo, edizione.anno,
    fondo.nomefondo,
    genere.gen,
    dedica.dedicamarone
    FROM libri
    INNER JOIN autore ON libri.id_autore = autore.id_aut
    INNER JOIN edizione ON libri.id_edizione = edizione.id_edizione
    INNER JOIN fondo ON libri.id_fondo = fondo.id_fondo
    INNER JOIN genere ON libri.id_genere = genere.id_genere
    INNER JOIN dedica ON libri.id_dedica = dedica.id_dedica

    Ho impostato il ciclo while in questo modo:
    while ($riga = mysql_fetch_array($rs)) {
    $nome_autore = $riga['autore.nome_aut'];
    $cognome_autore = $riga['autore.cognome_aut'];
    $titolo_ = $riga['libri.titolo'];
    $editore = $riga['edizione.editore'];
    $luogo = $riga['edizione.luogo'];
    $anno_ = $riga['edizione.anno'];
    $fondo = $riga['fondo.nomefondo'];
    $genere = $riga['genere.gen'];
    $dedica = $riga['dedica.dedicamarone'];


    ma non ottengo alcun risultato.
    In realtà il mio obiettivo è costruire una query di ricerca FULL TEXT e quindi utilizzare MATCH e AGAINST. A tal fine avevo impostato la query in questo modo:

    SELECT libri.titolo, libri.nota,
    autore.nome_aut, autore.cognome_aut,
    edizione.editore, edizione.luogo, edizione.anno,
    fondo.nomefondo,
    genere.gen,
    dedica.dedicamarone
    MATCH (libri.titolo,autore.nome_aut,autore.cognome_aut,e dizione.editore) AGAINST('$autore','$titolo','$edizione','$anno','$ riclibera' IN BOOLEAN MODE)
    FROM libri
    INNER JOIN autore ON libri.id_autore = autore.id_aut
    INNER JOIN edizione ON libri.id_edizione = edizione.id_edizione
    INNER JOIN fondo ON libri.id_fondo = fondo.id_fondo
    INNER JOIN genere ON libri.id_genere = genere.id_genere
    INNER JOIN dedica ON libri.id_dedica = dedica.id_dedica
    WHERE MATCH(libri.titolo,autore.nome_aut,autore.cognome_ aut,edizione.editore) AGAINST('$autore','$titolo','$edizione','$anno','$ riclibera' IN BOOLEAN MODE)

    ma ottengo come messaggio:
    " Errore query database: 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 'MATCH (libri.titolo,autore.nome_aut,autore.cognome_aut,e dizione.editore) AGAINST' at line 7"

    C'è qualcuno disposto ad aiutarmi?
    Grazie
    Claudia

  2. #2
    dedica.dedicamarone
    MATCH (libri.titolo,autore.nome_aut,autor.........

    manca la virgola di separazione dei campi elencati nella select

    Diamo per scontato che hai gia' creato gli indici fulltext e che questi lavorino su multitabelle. Comincia a correggere mettendo la virgola e poi verra' il resto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230

    Re: Problema con query INNER e MATCH

    in aggiunta a quanto ti e' gia' stato indicato

    Originariamente inviato da mediasteno
    4) nome tabella: autore campi: id_autore nome_aut cognome_aut
    [...]
    INNER JOIN autore ON libri.id_autore = autore.id_aut
    [...]
    ma non ottengo alcun risultato.
    per forza, intanto non esiste il campo id_aut. Controlla con attenzione tutte le altre chiavi del join.

    AGAINST('$autore','$titolo','$edizione','$anno','$ riclibera' IN BOOLEAN MODE)
    [...]
    ma ottengo come messaggio:
    " Errore query database: 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 'MATCH (libri.titolo,autore.nome_aut,autore.cognome_aut,e dizione.editore) AGAINST' at line 7"
    against() accetta una stringa da cercare e la modalita, non accetta 5 stringhe separate. Se ho capito bene quello che vuoi fare, in modalita' booleana ti basta fare un AGAINST('$autore $titolo $edizione $anno $riclibera' IN BOOLEAN MODE) - mysql cerchera una qualsiasi tra queste parole

  4. #4
    per quanto riguarda le virgole, mancava solo l'ultima virgola prima di MATCH, mi sembra. Circa l'errore di autore.id_autore in realtà la query è corretta mentre ho sbagliato a riportare i campi, è esattamente id_aut.
    Ho cercato di seguire i consigli ma ancora non ho risolto. Ora non mi dà alcun errore ma neanche dei risultati
    Tuttavia una domanda mi sono posta che sembra banale ma sicuramente da principiante. In che senso
    "Diamo per scontato che hai gia' creato gli indici fulltext e che questi lavorino su multitabelle."?
    Ho creato gli indici fulltext ma per operare su multitabelle devo impostare qualcosa in particolare?
    Grazie degli aiuti

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.