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

    MySQL verificare elemento in array

    Salve a tutti sono Federico, solitamente cerco di cavarmela da solo ma questa volta non so dove sbattere la testa.

    Supponete che abbia una tabella MySQL chiamata "albums" con una colonna chiamata "generi", e che questa colonna contenga una stringa che concatena con una virgola gli ID dei generi collegati a questo album. Quello che servirebbe a me č verificare se un ID (prendiamo come esempio l'id numero 5) č contenuto in questa stringa, per cui avevo pensato alla funzione IN() in questo modo:

    codice:
    SELECT * FROM albums WHERE 5 IN(genres)
    Ma non funziona, in quanto credo che MySQL interpreti "genres" come una stringa, e non come un vettore di interi:

    codice:
    SELECT * FROM albums WHERE 5 IN('1,2,3,4,5')
    Esiste un modo per ovviare a questo problema?
    Momentaneamente ho adottato questa soluzione, un po ambigua ma funzionale:

    codice:
    SELECT * FROM albums WHERE genres REGEXP '(,5,|^5,|,5$|^5$)'
    Grazie mille in anticipo!
    Federico Liva | Web Perfectionist
    @fede91it | +Federico Liva | fede91it@gmail.com

  2. #2

  3. #3
    rimediabile...

    SELECT * FROM albums WHERE (',' & genres & ',') LIKE '%,' & @variabile & ',%'

    che diventa

    SELECT * FROM albums WHERE (',1,2,3,4,5,') LIKE '%,5,%'


  4. #4
    La procedura di normalizzazione non posso farla, devo fare tutto con una query indi per cui opto per la soluzione di optime.. Sei un genio assoluto, non ci avevo pensato!

    Grazie mille ragazzi, alla prossima!
    Federico Liva | Web Perfectionist
    @fede91it | +Federico Liva | fede91it@gmail.com

  5. #5
    Originariamente inviato da fede91it
    La procedura di normalizzazione non posso farla, devo fare tutto con una query indi per cui opto per la soluzione di optime.. Sei un genio assoluto, non ci avevo pensato!
    non sono un genio assoluto, č che in certe situazioni ci sono giā passato...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Lungi da me mettere in dubbio la genalitā del caro optime che č un grandissimo ma se trovi ambiguo l'uso delle espressioni regolari ( ), nel link che ho postato c'č la funzione find_in_set() che fa esattamente quello sporco lavoro.

  7. #7
    Ma tu hai scritto che bisognerebbe normalizzare, mentre col suo metodo non mi serve far nulla di tutto ciō
    Federico Liva | Web Perfectionist
    @fede91it | +Federico Liva | fede91it@gmail.com

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ho semplicemente ricercato un vecchio thread usando come chiave di ricerca "normalizzare". Aperto il thread il mio primo post č testualmente

    select * from tabella where find_in_set(11,campo)

    Il consiglio č comunque quello di normalizzare la tabella.

  9. #9
    Funziona egregiamente, ottimo ottimo.
    Chissā perchč optime continua ad usare la regexp
    Federico Liva | Web Perfectionist
    @fede91it | +Federico Liva | fede91it@gmail.com

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da fede91it
    Chissā perchč optime continua ad usare la regexp
    Manderesti in galera un innocente.
    La regexp l'hai postata tu definendola pure ambigua e immagino l'abbia recuperata da qualche vecchio thread su questo stesso forum.

    La soluzione di optime č ottima (scusando il gioco di parole ) ma visto che mysql dispone giā di una funzione nativa tanto vale sfruttarla.

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.