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)

È stato utile?

Soluzione

SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);

FIND_IN_SET

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top