• User

    Query con condizione WHERE imprecisa

    Ciao a tutti
    sono alla prese con una condiziuone where in una query che si deve basare su un campo deacrittivo che contiene un sommario della descrizione di un oggetto

    La mia query è;

    $query = "SELECT codice, nome, presenze, memo FROM $database where tipo like '%$tipo%' && presenze>0";

    dove $tipo è una frase sicuramente contenuta nel campo tipo fi alcuni records.

    Però:
    se nel campo tipo di un record abbiamo: manuali per piloti
    e in una altro: manuali per piloti esperti

    e nella variabile $tipo mettiamo: manuali per pilori mysql mette tutti i manulai che contengono manuali per piloti quindi anche manulai per piloti esperti
    Come posso fare a rendere la query più precisa mantenendo il like che è flessibile ed adatto al mio caso?
    In pratica potrei chiedere $tipo=espoerti ma la parola esperti potrebbe essere anche presente in reecord che contengono per es,automobilisti esperti ecc..
    Grazie


  • Consiglio Direttivo

    Non credo che tu possa ottenere flessibilita' e rigidita' al contempo, almeno non con questa struttura.
    Dovresti trovare una struttura che ti permetta di fare quel che cerchi di fare. Ma come strutturare il Db dipende solo ed esclusivamente dalle possibili combinazioni.
    Nel caso di cui sopra potrei dirti di modificarlo in:
    [php]$query = "SELECT codice, nome, presenze, memo FROM $database where tipo like '%$tipo' && presenze>0";[/php]
    così non prendera' stringhe contenenti $tipo che abbiano altri caratteri dopo la stringa trovata. Ma questo esempio potrebbe andare bene solo per questi casi e magari non per altri...;)


  • User

    Quindi mettendo % solo prima di $tipo'
    che cosa fa esattamente %
    tanto per saperlo usare

    grazie


  • Consiglio Direttivo

    Usando % non fai altro che dire "Qualunque numero di caratteri", per capirci come se nel tuo pc facessi una cerca di un file *per, *ti trova tutti i file che contengono la parola per ed in qualunque posizione, sia che si chiamino "manuali per piloti", sia che si chiamino "manuali per piloti esperti" e sia che si chiamino "manuali per" o *"per piloti" *(esempio stupido ma rende l'idea ;)). Basta che contenga la stringa per per lui va bene, il resto del testo puo' avere una lunghezza qualunque.
    Se tu invece scrivi %piloti, lui ti cercherà tutto cio' che finisce con la parola piloti, ovvero lui ti estrarrà "manuali per piloti", ma non "manuali per piloti esperti", ma potrebbe uscirti anche "terapia per piloti" o roba simile.
    Mettendo il % alla fine invece (piloti%) lui estrarrà tutto cio' che inizia con piloti.
    Spero che la cosa sia chiara 😉