Query SQL in lista di valori separati da una virgola? C’E’!

Se come me hai avuto bisogno di prendere da un database solo dei dati che contenessero un determinato valore, il solito LIKE non può andare bene se il valore cercato è in una lista di valori separati da una virgola, facilmente producibili da un implode() di array o un salvataggio di dati da una serie di checkbox/select multipla.

ESEMPIO:
Sito di news.
Tante news che faranno parte di più categorie (sport, attualità, calcio).
Salviamo le categorie sotto forma di id: ‘1,3,7’
Vogliamo fare una query che escluda a priori tutte le news che non hanno la categoria richiesta (esempio sezione sport di cui l’id sarà 7), o ogni visita sarà un tedio per il sistema, visto che dovremo poi elaborare e mostrare i soli dati che apparterranno alla categoria filtrata DOPO la query (e questo non va bene perché il server avrà già risposto con TUTTE le news presenti nel database).

SOLUZIONE (già, una sola riga):

SELECT * FROM news WHERE FIND_IN_SET(7, categoria)

e la query è fatta!

Funziona come un ‘in_array()’ o uno ‘strpos()’, con la differenza che si trova nella query, quindi estrarrà solo i dati realmente corretti.

SPIEGAZIONE:

FIND_IN_SET(valore, campoInCuiCercare) cerca il primo valore nel secondo campo, e funziona SOLO in caso di lista di valori separata da una virgola. Tutto qui.

Annunci

, , , , , ,

  1. Lascia un commento

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: