• User Attivo

    Query simile a in_array di php

    Salve mi ritrovo dinanzi ad una situazione un pò difficilotta e cioè vorrei cercare tutte le righe dove la chiave corrisponda ad una delle chiavi presenti in un campo separate da trattini ....
    es.

    SELECT * FROM tabella WHERE 5 IN (2-22-5-14-23-55-31)
    

    funziona solo in questa circostanza:

    SELECT * FROM tabella WHERE 5 IN (5)
    

    qualcuno saprebbe illuminarmi ?!?! 🙂

    thanks all


  • User Attivo

    Ciao prova così

    
    SELECT * FROM tabella WHERE '%-5-%' LIKE '2-22-5-14-23-55-31'
    
    

  • User Attivo

    Scusa è il contrario...

    
    SELECT * FROM tabella WHERE '2-22-5-14-23-55-31' LIKE '%-5-%'
    
    

  • User Attivo

    @christian82 said:

    Ciao prova così

    
    SELECT * FROM tabella WHERE '%-5-%' LIKE '2-22-5-14-23-55-31'
    
    

    ok anche se in realtà dopo il LIKE avrei il nome di un campo e non una serie di valori interi ... cioè:

    SELECT * FROM tabella WHERE '%-5-%' LIKE 'zone_di_consegna'
    (zone_di_consegna in realtà è il canpo VARCHAR con all'interno i valori separati da trattini) funzionerà lo stesso ?
    Nel mio caso specifico stò raffinando una qry di ricerca con il parametro zona di consegna se uno sceglie ad es. puglia=[15] e tra i valori numerici x-y-z-etc... c'è il [15] deve intercettarla la riga ...

    grazie a tutti


  • Consiglio Direttivo

    Ciao Gandalf. 🙂
    Come ti consigliava christian82 (secondo post) quella potrebbe essere la soluzione ideale:
    SELECT * FROM tabella WHERE 'zone_di_consegna' LIKE '%-5-%'

    Dato che la query estrarrà le righe dove troverà questo *-5-

    Però bisogna attenzionare esattamente cosa contengono quei campi, se per caso hai un campo con:
    5-9-8-6-8 *oppure *5
    *Non ti estrarrà nulla dato che non trova la stringa -5-
    E neanche mettere %5% risolve il problema perché ti estrarrà tutti i campi dove è presente un 5:
    5 o 15 o 25 o 35 o 45 etc etc soddisferanno la condizione

    E forse neanche giostrandoti con i LIKE potresti avere una soluzione:
    LIKE '%-5-%' OR LIKE '%5-%' OR LIKE '%-5%' questo si prenderebbe anche i -50 o -51 o -52 etc etc.

    Forse (se non mi sfugge qualcosa) se hai la possibilità di giostrarti con i numeri da 10 a 99 potresti effettuare un semplice LIKE '%10%'


  • User Attivo

    Ok grazie ma possibile che per casi come i miei non esist una clausola definita in mysql ?! Non credo che sia rarissimo come caso ... in altre circostanze ho letto il campo singolarmente e ho controllato con if(in_array(blabla)) solo che ora mi ritrovo dentro un ciclo dove non posso leggere per 1000 righe ogi volta un campo e confrontare ...

    Per Samyorn il campo in questione viene creato/aggiornato in base alle zone di consegna di un articolo (si tratta di codici numerici rappresentanti la/e regione/i italiana/e...)
    Dunque se uno come opzione di ricerca sceglie Lombardia mi deve restituire tutti gli articoli consegnabili anche in Lombardia.
    Eppure mysql una clausola ce l'avrà ... sigh 😢


  • User

    Ma i valori nell'IN non vanno separati da virgola?

    
    SELECT * FROM tabella WHERE 5 IN (2,22,5,14,23,55,31)
    
    

  • User Attivo

    Ciao, come ti ha già Samyorn per ricercare una stringa dentro un campo il metodo è quello di utilizzare LIKE, ed è abbastanza semplice basta ottimizzare il valore che inserisci, quindi non utilizzare 5 ma 05 per numeri da 0 a 99 e questo ti permette di ricercare i numeri con il semplice comando %05%.
    Un'altra piccola cosa che ti suggerisco di fare se ne hai le possibilità è quello di normalizzare il db per evitare la duplicazioni dei dati.


  • User Attivo

    @EcoBB said:

    Ma i valori nell'IN non vanno separati da virgola?

    
    SELECT * FROM tabella WHERE 5 IN (2,22,5,14,23,55,31)
    
    

    Si rigorosamente tra virgole, se nel mio caso anzichè usare i trattini (-) provo con le virgole ... solo che se non ricordo male se faccio un echo $sql;il risultato è il seguente:

    SELECT * FROM tabella WHERE 45 IN (zone_di_consegna) ....

    anzichè:
    SELECT * FROM tabella WHERE 45 IN (11-23-25-32-33-etc..) ....

    Non mi interpreta il nome_campo nei rispettivi valori contenuti ma resta semplice testo !!!!!! :mmm:


  • User Attivo

    @christian82 said:

    Ciao, come ti ha già Samyorn per ricercare una stringa dentro un campo il metodo è quello di utilizzare LIKE, ed è abbastanza semplice basta ottimizzare il valore che inserisci, quindi non utilizzare 5 ma 05 per numeri da 0 a 99 e questo ti permette di ricercare i numeri con il semplice comando %05%.
    Un'altra piccola cosa che ti suggerisco di fare se ne hai le possibilità è quello di normalizzare il db per evitare la duplicazioni dei dati.

    Normalizzare a me ?!?!?!? come ti permetti ?!?!?! 😄 No scherzo mi piace la sfida che m'hai lanciato, sono un maniaco della normalizzazione quindi se qualcuno mi fà notare qualcosa d anormalizzato ben venga !!
    Come posso mostrarti la mia struttura ? Accetto volentieri una critica esterna, non mi è mai capitato.

    Ciao :ciauz:


  • User Attivo

    😄 Dai spero che non te la sei presa molto...ma quello che hai scritto prima

    Dunque se uno come opzione di ricerca sceglie Lombardia mi deve restituire tutti gli articoli consegnabili anche in Lombardia.
    Mi ha fatto pensare...per la struttura se vuoi *****.
    Ciao:ciauz:


  • User

    Se zone_di_consegna è una variabile php devi metterci il $ davanti


  • User Attivo

    [...]
    😞 No è il nome del campo ... dove all'interno ci sono i valori separati da trattini !!! Solo che quando mi facci stampare la query a video mi sà che mi torna così com'è non sò il perchè ... :bho:

    @christian82 te la mando in pvt, vorrei qui per condividere a tutti, ma non sò se c'è spazio 😞 come lo incollo tutto l'ambaradan qui ?! 😮