Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Domanda sull'estrazione dei dati

    Ragazzi ho una domanda, volevo sapere se si può fare.

    Ho una tabella chiamata anagrafica, e il campo indirizzo, ora può capitare che l'utente inserisca Via Milano 5, un altro Via milano 4,

    volevo sapere se si possono cmq estrarre, nonostante non sia identici, che la query estrapoli dalla tabella quelli che hanno via milano come scritto scritto, e che ignori quello dopo o cmq estragga i negozi che si trovano a quella via

  2. #2
    In questi casi puoi utilizzare Like
    codice:
    $query="Select * From Table Where indirizzo Like 'via milano%' ";
    Il simbolo percentuale, posto alla fine, recupera tutti gli indirizzi che iniziano con "via milano".

  3. #3
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Se usi MySQL per definizione il confronto è case insensitive (se non dove specificato), quindi VIA MILANO=via milano.
    L'uso di LIKE con un % che finisce consente di usare comunque un eventuale indice presente nell'indirizzo.
    Se hai pochi dati, ovvero quando un FULL SCAN non sarebbe troppo punitivo, ti consiglio di utilizzare anche qualche accorgimento ulteriore, quale
    - REPLACE degli spazi con niente
    - REPLACE di . con niente
    - REPLACE di , con niente
    Per tener conto di "via Milano , 13" vs "Via Milano,13"
    Puoi anche far di meglio, con una REGEX brutale che "strippi via" praticamente tutto tranne i caratteri alfanumerici, dipende dal livello di "rilassatezza" che vuoi ottenere nella ricerca

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Secondo me il suo problema è che gli da fastidio il civico, per lui "Via Milano 4" e "Via Milano 5" devono dare lo stesso risultato.
    In tal caso deve tirare via il civico dalla stringa dell'indirizzo ed eseguire la query con l'indirizzo così pulito.

  5. #5
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Secondo me il suo problema è che gli da fastidio il civico, per lui "Via Milano 4" e "Via Milano 5" devono dare lo stesso risultato.
    In tal caso deve tirare via il civico dalla stringa dell'indirizzo ed eseguire la query con l'indirizzo così pulito.
    Può essere, come accennato potrebbe anche tirar via tutto tranne i caratteri. Ma per quanto ne so con MySQL e basta non si può fare, serve una procedurina.
    Personalmente memorizzo due campi: indirizzo "normale" e indirizzo "rilassato", nel qual caso taglio via tutto quanto e tengo solo la parte "utile" (stesso discorso ad esempio per spazi e . nelle intestazioni delle ditte, tipo Cippa Lippa SAS e Cippa Lippa S.A.S.).
    Questo mi consente, tra l'altro di usare gli indici in fase di ricerca evitando la full scan.
    Per la precisione spesso memorizzo direttamente il CRC32 della stringa rilassata, con un doppio controllo (se CRC= allora confronta il testo) per le collisioni, ottenendo ricerche = su indici hash invece che "alla like" su indici ad albero.

    Certo, se hai 100 record non val la pena complicarsi la vita.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ma infatti avendo scritto nella sezione PHP e non in quella Database, la soluzione sarebbe pulire la stringa con PHP e poi usarla per la query.

  7. #7
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ma infatti avendo scritto nella sezione PHP e non in quella Database, la soluzione sarebbe pulire la stringa con PHP e poi usarla per la query.
    Certo, ma questo prevede di mantenere, come sopra accennato, due campi "normale" e "rilassato" (o purgato che dir si voglia)

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non è detto.
    Metti che nella tabella abbia il campo "indirizzo" dove può esserci scritto l'indirizzo esteso, per esempio "via Milano, 4 00100 Roma".
    Un utente inserisce "via Milano, 5" e lui vuole che l'indirizzo nel db venga restituito.
    Con PHP tira via ", 5" ed esegue una query con clausola LIKE, così di campo per l'indirizzo ne basta uno.

    Il problema al limite è scrivere il codice giusto per eliminare la parte indesiderata dell'indirizzo, perché magari uno scrive "via Milano 5" senza virgola o altro.

  9. #9
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Il problema al limite è scrivere il codice giusto per eliminare la parte indesiderata dell'indirizzo, perché magari uno scrive "via Milano 5" senza virgola o altro.
    Problema che Like risolve brillantemente e senza fatica...

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sì, ma al LIKE devi passare la stringa già senza il ", 5", ovvero come ho detto prima.
    Se nella stringa il ", 5" c'è che cosa gli passi a LIKE? Ti troverà le stringhe che hanno anche il ", 5"

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.