Domanda
Qualcuno può darmi una query che restituirà come ID righe dei risultati 1 & 3?
ID Name Hidden
1 Mika 1,4,2
2 Loca 0
3 Nosta 4
4 Like 2
Qualcosa di simile SELECT * FROM tabella WHERE nascosti che hanno (4)
Soluzione
SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);
Altri suggerimenti
SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'
oppure si può evitare di utilizzare come come questo
SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0
questo non sarà possibile ottenere le cose come 40, 14, ecc, ma è necessario assicurarsi che non vi siano spazi nel campo nascosto (ad esempio, 1, 4, 5
o aggiornare il concat e funzione come conseguenza.
SELECT * FROM table WHERE Hidden LIKE '%4%'
l'% sono i caratteri jolly.
testo intero potrebbe essere un ragionevole soluzione per questo fino a quando si utilizzano le interruzioni di parola corretta.
o andare con Full Text Search, come suggerito, o
Spin i valori nascosti fuori in una tabella separata, con l'ID della riga corrente.
Per esempio, Mika avrebbe tre voci in questa tabella
ID = 1, Hidden = 1
ID = 1, Hidden = 4
ID = 1, Hidden = 2
Poi si potrebbe restituire i risultati contro questo spin off tavolo.
Si può anche prendere in considerazione normalizzare la tavola e la memorizzazione di questi valori "nascosti" in una tabella separata con un indice sulla colonna apropriate. A seconda del numero di righe che avete che sarebbe molto più veloce:
ID Hidden
1 1
1 4
1 2
3 4
4 2
e
SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4