Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543

    controllare l'esistenza di un valore all'interno di un campo "misto"

    Salve a tutti,
    sicuramente dal titolo si capisce poco e niente, perciò mi spiego meglio.
    In pratica ho un campo database (mysql) in cui aggiungo dei valori separati da virgola.
    Per controllare, quindi, se un valore è contenuto all'interno di questo campo effettuo una chiamata al DB e mi faccio resistuire l'intero campo e poi effettuo un "explode" della virgola per avere un array contenente un valore per ogni indice array.
    La mia domanda è: esiste qualcosa di più veloce o va bene il mio ragionamento?
    "To iterate is human, to recurse, divine." (R.(Heller))

  2. #2
    esiste qualcosa di più veloce:
    filtra direttaemnte il campo attraverso la select usando il carattere jolly sql '%'.


    esempio
    Diciamo che hai una tabella 'tab_dizionario' che contiene un campo 'id' e un campo 'parole'

    ID , PAROLE

    1, 'casa, onda, fantasia, burattino, computer'
    2, 'penna, parco, fantasia, teatro'
    3, 'casa, codice, schermo'

    e tu vuoi ottenere gli 'ID' dei record che nel campo 'parole' contengono la parola 'fantasia' (1-2)

    ti basta fare

    SELECT id FROM tab_dizionario WHERE parole LIKE '%fantasia%';

  3. #3
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    a questo ci avevo già pensato.
    Il problema, però, è che ho a che fare con dei numeri e l'operazione che devo fare non è una semplice estrazione di tutti quei valori che iniziano per un certo numero o per una certa parola ma un confronto.
    Esempio: nel campo DB chiamato "campo_dati" ho i seguenti numeri: 1,2,3,11,12,15
    Se io volessi, ad esempio, verificare che questo campo contiene il numero 15 (non, quindi, 1 e 5, ma 15) come dovrei fare?
    "To iterate is human, to recurse, divine." (R.(Heller))

  4. #4
    codice:
    where concat(campo_dati,',') like '%,15,%'
    immagino, oppure usando una delle funzioni di stringe come locate o regexp o instr o altre che puoi vedere qui:

    http://dev.mysql.com/doc/refman/5.0/...functions.html

    ps: immagino che tu usi mysql...tutti usate mysql
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    SELECT id FROM tab_dizionario WHERE parole LIKE '%,15,%';

    il fatto di mettere ',15,' ti assicura di non prendere i campi conteneti numeri tipo '156' '157' (che dopo 15 non hanno ',') nè i campi con '115', '315' ( che prima di 15 non hanno ','), nè tantomeno quelli con '1' e '5' da soli

  6. #6
    Originariamente inviato da philbert
    SELECT id FROM tab_dizionario WHERE parole LIKE '%,15,%';

    il fatto di mettere ',15,' ti assicura di non prendere i campi conteneti numeri tipo '156' '157' (che dopo 15 non hanno ',') nè i campi con '115', '315' ( che prima di 15 non hanno ','), nè tantomeno quelli con '1' e '5' da soli
    SE IN FASE di select non aggiunge la virgola alla fine del campo, però, non troverà mai i record con 15 in ultima posizione

    e già che ci sono, va aggiunta la virgola anche all'inizio del campo altrimenti non trovi 15 in prima posizione...

    insomma, attenzione ai delineatori
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.