2013-05-25 21 views
5

Ho una tabella che contiene i seguenti valori:MySql REGEXP per abbinare due separati da virgola stringhe

id | value  | 
----------------------- 
1  | 1,2,5,8,12,20 |  
2  | 11,25,26,28 |  
----------------------- 

ora voglio cercare un po 'separati da virgola gli ID per esempio '1,3,6,7,11' dalla colonna del valore precedente, ad es.

SELECT id FROM tbl_name 
WHERE value REGEXP '*some reg exp goes here containing 1,3,6,7,11*' 
LIMIT 1,0; 

SELECT id FROM tbl_name 
WHERE value REGEXP '*some reg exp goes here containing 3,6,27,15*' 
LIMIT 1,0; 

sopra prima query dovrebbe restituire 1, mentre la seconda deve restituire NULL

Sono con le espressioni regolari Chiunque può aiutare. Grazie

+0

Giusto per essere sicuro di capire, deve restituire '1' perché almeno uno dei numeri corrisponde sulla riga con quella id? –

+0

Proprio come una nota a margine, non aspettatevi buone prestazioni da una query che utilizza questo formato di dati, non sarà in grado di utilizzare alcuna forma di indici e sarà sempre necessario leggere l'intera tabella per rispondere alla query. In altre parole, non va bene per il rendering di una pagina Web in tempo reale se ci sono più di poche centinaia di righe di dati. –

+0

No, dovrebbe essere l'ID di quella riga, e sì è ritornato se almeno uno dei numeri corrisponde. – prashant

risposta

13
REGEXP '(^|,)(1|3|6|7|11)(,|$)' 

corrisponderà a tutti i valori che contengono un numero della sequenza 1,3,6,7,11.

Non si deve utilizzare una colonna per salvare più valori. Normalizza i dati!

cura risposta

+0

grazie a @Michel, ma voglio corrispondere se uno qualsiasi dei numeri (almeno uno) nella stringa fornita corrisponde al valore, come nella domanda 1 corrisponde alla prima stringa e al valore. – prashant

+0

Risposta aggiornata. Cosa significano questi valori? Questa query richiederà più tempo con le lunghezze dei valori crescenti e le dimensioni della tabella. Posso aiutarti a elaborare una normalizzazione se vuoi –

+0

+1 In realtà mi piace questa soluzione meglio della mia :) –

Problemi correlati