Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema like

  1. #1
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121

    [MySql]Problema like

    Ciao a tutti,
    devo fare una piccola query mysql che filtri dei dati.
    Infatti ho una tabella mysql che contiene varie cartelle.
    Ad esempio:
    codice:
    C:\cartella\
    C:\cartella\sotto-cartella
    C:\folder
    C:\folder\a
    Ora vorrei filtrare queste cartelle in modo da non mostrare le sotto cartelle di una cartella.

    faccio un esempio per farmi capire meglio:

    vorrei ad esempio che la query di selezione non mostrasse le sotto directory C:\cartella\

    quindi il risultato, usando l'esempio di prima, sarebbe:
    codice:
    C:\folder
    C:\folder\a
    per fare ciò ho pensato di usare questa query ma non funziona..
    codice:
    SELECT * FROM  cartelle 
    WHERE cartella NOT LIKE  "%C:\cartella\%"
    eppure la mostra lo stesso le sotto directory

    Cosa mi consigliate?

    p.s.
    Mi sono appena accorto che se eseguo
    codice:
    SELECT * FROM  cartelle 
    WHERE cartella NOT LIKE  "%cartella%"
    funzione bene, ma tuttavia non è preciso. Sembra quasi che appena metto un \ la query sballi totalmente...

  2. #2
    il backslash e' il carattere di escape e quindi devi metterlo doppio o passare (meglio) la stringa con mysql_real_escape string() prima di utilizzarla.

    codice:
    SELECT * FROM  cartelle 
    WHERE cartella NOT LIKE  "%C:\\cartella\\%"

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

  3. #3
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    Ho capito gli errori

    innanzittutto non posso scrivere \% altrimenti mysql lo prende come un % e manda a farsi benedire il like.
    Quindi basta cercare ad esempio C:\cartella e non C:\cartella\

    E poi la cosa più strana è che per la ricerca ci voglio ben 4 backslash, ovvero:

    select * from cartelle WHERE cartella LIKE "C:\\\\sysadmin\\\\Download\\\\cartella%"

    Qualcuno sa spiegarmi il perchè del bisogno di tutti questi \ ?

  4. #4
    Originariamente inviato da XBarboX
    Ho capito gli errori

    innanzittutto non posso scrivere \% altrimenti mysql lo prende come un % e manda a farsi benedire il like.
    Quindi basta cercare ad esempio C:\cartella e non C:\cartella\

    E poi la cosa più strana è che per la ricerca ci voglio ben 4 backslash, ovvero:

    select * from cartelle WHERE cartella LIKE "C:\\\\sysadmin\\\\Download\\\\cartella%"

    Qualcuno sa spiegarmi il perchè del bisogno di tutti questi \ ?
    intanto % non e' un carattere di controllo come \ e quindi non vuole il carattere di escape. il backslash deve essere parsato perche' e' un carattere di controllo che pero' dovra' per l'occasione essere interpretato come stringa.

    Prova ad usare gli slashes al posta dei backslashes

    codice:
    WHERE cartella LIKE  "C:/sysadmin/Download/cartella%"

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

  5. #5
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    Ho trovato la soluzione ma non capisco il perchè funzioni

    Praticamente basta eseguire questa query:

    select * from cartelle where cartella not like "%C:\\\\cartella\\\\%"
    e non mi mostra tutte le sotto cartelle...
    Qualcuno ha idea del perchè necessiti di ben 4 back-slash?

  6. #6
    Originariamente inviato da XBarboX
    Ho trovato la soluzione ma non capisco il perchè funzioni

    Praticamente basta eseguire questa query:

    select * from cartelle where cartella not like "%C:\\\\cartella\\\\%"
    e non mi mostra tutte le sotto cartelle...
    Qualcuno ha idea del perchè necessiti di ben 4 back-slash?
    La soluzione e' quella di usare gli slash. Se porti il tuo script su un server linux non ti funzionera'. Apache stesso vuole gli slash.

    A parte che non capisco cosa vuoi fare. Probabilmente hai memorizzato nel database il path con due backslashes. Ma ha senso mettere questo path nel database?

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

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.