Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662

    Select FULL TEXT con INNER JOIN

    Ok, la ricerca con fulltext funziona (su una sola tabella).
    Ma se volessi fare la ricerca su più tabelle?

    Ho provato sia così:

    Codice PHP:
    SELECT *,
    MATCH (nome,cognome,username,genere1,genere2,genere3,descrizione
    AGAINST ('$txt')
    FROM users
    INNER JOIN a_data
    ON users
    .id=a_data.id_user
    WHERE MATCH 
    (nome,cognome,username,genere1,genere2,genere3,descrizione)
    AGAINST ('$txt'
    ..che così:

    Codice PHP:
    SELECT *,
    MATCH (users.nome,users.cognome,users.username,genere1,genere2,genere3,descrizione
    AGAINST ('$txt')
    FROM users
    INNER JOIN a_data
    ON users
    .id=a_data.id_user
    WHERE MATCH 
    (users.nome,users.cognome,users.username,a_data.genere1,a_data.genere2,a_data.genere3,a_data.descrizione)
    AGAINST ('$txt'
    ..e non va.

    Ma dove sbaglio??
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  2. #2
    Non l'ho provato ma guarda questo esempio:
    codice:
    SELECT *, MATCH( name ) AGAINST('%$search_term%') OR MATCH( text ) AGAINST('%$search_term%') AS score 
    FROM tableA LEFT JOIN tableB ON tableA.tableA_id = tableB.tableB_id 
    WHERE MATCH( name ) AGAINST('%$search_term%') OR MATCH( text ) AGAINST('%$search_term%')
    La chiave di tutto è OR MATCH( text ) AGAINST('%$search_term%')

    prova a cambiare così la tua query e facci sapere.

    Ciao

  3. #3
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    eh ma che differenza c'è tra ( name ) e ( text ) ?

    Ho provato così ma non va:

    Codice PHP:
    SELECT *,
    MATCH(nome,cognome,username,genere1,genere2,genere3,descrizione)
    AGAINST('$txt')
    OR 
    MATCH(nome,cognome,username,genere1,genere2,genere3,descrizione)
    AGAINST('$txt')
    AS 
    score 
    FROM users
    LEFT JOIN a_data
    ON users
    .id a_data.id_user
    WHERE MATCH
    (nome,cognome,username,genere1,genere2,genere3,descrizione)
    AGAINST('$txt')
    OR 
    MATCH(nome,cognome,username,genere1,genere2,genere3,descrizione)
    AGAINST('$txt'
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  4. #4
    name è un campo della tabella A e text è il campo della tabella B: così fai la ricerca su 2 tabelle...
    posta anche l'errore mysql così capiamo di più...

  5. #5
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Fantastico chrismo!
    Funziona benissimo.

    Solo che ho aggiunto un campo nella select (seconda tabella) e non ha funzionato di nuovo.
    Poi mi sono ricordato dell'indice FULLTEXT sul database.
    Io utilizzo il mysql di un famoso hosting italiano che inizia per A. e l'indice, una volta aggiunto, non me lo fa vedere nella tabella
    Come faccio ad aggiungere un campo all'indice?

    Intanto grazie mille
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  6. #6
    ciao,

    io lavoro per quel famoso hosting italiano che inizia per a..!
    Cmq cancella e ricrea l'indice FULL text inserendo tutti i campi di cui hai bisogno.

  7. #7
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    MADAAAAI!!!!!
    Quale onore!!! E di che ti occupi?

    ..ehm.. come faccio a cancellarlo se non lo vedo?
    Per modificare un campo FULLTEXT ieri ho fatto il backup della tabella, ho cancellato il campo dallo script SQL e ho ricaricato.
    ..ma vorrei evitare questo, ora sono in fase di test, ma se un domani mi dovesse capitare di modificare il campo FULLTEXT e per qualche motivo con tutta la trafila del cancella e ricarica mi vado a perdere i dati?

    Come posso cancellare solo l'indice FULLTEXT e ricrearlo? (bhè, per ricrearlo dovrei riuscirci, è cancellarlo il problema )
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  8. #8
    ciao,

    un full text non è altro che un tipo di indice e per cancellarlo devi utilizzare la sintassi per droppare gli indici:
    codice:
    ALTER TABLE tableName DROP index `index_name` ;
    e poi lo ricrei con la sintassi:
    codice:
    ALTER TABLE tableA ADD FULLTEXT(columnA, columnB);
    Sono un programmatore che lavora per una delle tante società del gruppo A... mi occupo di programmazione in ambiente Microsoft e PHP, MySQL...

  9. #9
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Fantastico, quindi sempre in Toscana?

    Prima di procedere ho un dubbio.

    Quando ho creato l'indice ho scritto:
    ALTER TABLE users ADD FULLTEXT(nome, cognome, username);

    Nell'istruzione per cancellare l'indice che mi riporti:
    ALTER TABLE tableName DROP index `index_name` ;
    ...index credo rimanga "index" ma 'index_name' cosa ci metto...
    non ho mica dato un nome all'indice.
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  10. #10
    anche se non hai dato il nome all'indice MySQL gliene assegna uno: se esegui questa query
    codice:
     show index from tableName;
    vedrai il campo Key_name, quello, se non ricordo male, è il nome da utilizzare per referenziare l'indice.
    Fai una prova e poi fammi sapere così mi rinfresco anche la memoria...

    Sono a Milano ma ho un pao di colleghi toscanacci che prima erano in sede ad Arezzo...

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.