2014-04-15 18 views
7

Sto tentando di memorizzare i dati JSON (praticamente una matrice in PHP che potrebbe essere di lunghezza sconosciuta) in una colonna che mi consenta di eseguire le query su di essa. Usiamo questo come esempio ...MariaDB Dynamic Columns & JSON?

Dire che ho un campo che chiede che tipo di sport ti piace (ed è una casella di controllo).

[] Soccer 
[] Hockey 
[] Football 
[] Swimming 

che sarebbe poi inviati via sports[] array PHP. Allora voglio prendere questo e aggiungerlo al mio database in modo che appaia come

|sports|{hockey:false,swimming:true,football:false,soccer:true}| 

O qualcosa del genere, che ho potuto poi magari andare

SELECT COUNT(*) FROM fields WHERE hockey = "false"; 

E io non riesco a capire come fare correttamente, ignorare il fatto che questo "esempio" potrebbe essere fatto facilmente unendomi Voglio farlo usando le colonne dinamiche mariadb (almeno credo che sia quello che voglio). So che posso farlo usando Postgre.

risposta

7

E 'tutto qui: https://mariadb.com/kb/en/dynamic-columns/

Le colonne dinamiche sono memorizzati all'interno di una vera e propria colonna blob e inseriti in quel modo:

insert into data 
values (data_id, user_id, COLUMN_CREATE(<dcolumn1>, <value1>, <dcolumn2>, <value2>, ...)); 

in modo da non utilizzare JSON qui, invece serializzare i dati in questo modo:

$dynamic = array() 
foreach($_POST['sports'] as $sport) { 
    $dynamicData[] = "'" . $sport . "'", TRUE; 
} 
$dynamicColumn = join(', ', $dynamicData); 

genererà qualcosa come

'hockey', TRUE, 'soccer', TRUE 

Per cercare tutte le righe per ppl che giocano a calcio:

... where COLUMN_GET(dynamic_blob, 'soccer' as soccer) = TRUE;