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

    Problema GRAVE motore di ricerca flessibile ...

    Ho un problema immenso che vi spiego in maniera il più semplice possibile.

    Materiale
    Ho un database di 1gb e mezzo di anagrafiche utenti.

    Situazione attuale
    In questo DB un utente può essere inserito N volta ma può essere scritto (per problemi di inserimento da parte di operatori...) in N modi diversi.
    Quindi "mario rossi" può essere scritto:

    Maio Rossi
    Mario Rssi
    Mrio Rossi
    Mario
    Rossi
    Mro Rssi
    ecc....

    Problema
    Riuscire a fare un motore di ricerca che, inserendo ad esempio come chiave di ricerca "Rossi" (vedi esempio sopra) mi restituisca tutti i record SIMILI:

    Maio Rossi
    Mario Rssi
    Mrio Rossi
    Mario
    Rossi
    Mro Rssi

    ------
    Conosco la sintassi LIKE %...% ma qui si tratterebbe di un qualcosa di più complesso....

    QUALCHE SUGERIMENTO?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    [editato]
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Like non va bene perchè se ad esempio ho questi campi:

    1 - Maio Rossi
    2 - Mario Rssi
    3 - Mrio Rossi
    4 - Mario
    5 - Rossi
    6 - Mro Rssi

    e cerco

    Mario ( LIKE %mario%)

    Mi troverà solo

    4 - Mario

    Mentre io voglio che trovi tutti i record che contengono le lettere M a r i o


    Cmq credo di aver trovato :P

    codice:
    mysql> SELECT * FROM tabella WHERE name REGEXP 'mario';
    Si utilizzano le espressioni regolari nelle query.
    POTENTE!

  4. #4
    Io un idea ce l'avrei.

    In php esiste la funzione SUBSTRING.
    FAi un ciclo o una funzione , che crea una serie di sottostringe da 3 a n lettere e verifica dopo diche l'occorenza di quella stringhe nel tuo database.

    Esempio:

    Inseriamo ROSSI:

    Con SUBSTRING ti fai una funzione che prende tutte le stringhe da 3 a 5 lettere:

    RSSI
    ROS
    OSSI
    RSI
    ROSSI
    e via dicendo...

    Dopo di che usi la funzione per le occorrenza e vedi , se quella stringa compare all'interno di un altra stringa.......

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013


    Cmq credo di aver trovato :P

    codice:
    mysql> SELECT * FROM tabella WHERE name REGEXP 'mario';
    Si utilizzano le espressioni regolari nelle query.
    POTENTE!
    Sagace! Già ho editato il post precedente perché mi sono accorto dopo della necessità di tirar fuori anche Rssi o simili
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Originariamente inviato da Darios81
    Io un idea ce l'avrei.

    In php esiste la funzione SUBSTRING.
    FAi un ciclo o una funzione , che crea una serie di sottostringe da 3 a n lettere e verifica dopo diche l'occorenza di quella stringhe nel tuo database.

    Esempio:

    Inseriamo ROSSI:

    Con SUBSTRING ti fai una funzione che prende tutte le stringhe da 3 a 5 lettere:

    RSSI
    ROS
    OSSI
    RSI
    ROSSI
    e via dicendo...

    Dopo di che usi la funzione per le occorrenza e vedi , se quella stringa compare all'interno di un altra stringa.......
    MMMMMMMMMMMMMMMMMmmmmmmmmmmm

    Penso sia lento.
    Considera che ho pochissimo meno di 1 milione di record.....

    Vado con le espressioni regolari a manetta. LOL


    p.s.
    cmq se considerate che sia + veloce fare con substring fatemelo sapere :P

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.