2014-04-15 10 views
7

Ich versuche, JSON-Daten (so ziemlich ein Array in PHP, die unbekannter Länge sein könnte) in einer Spalte zu speichern, die es mir erlauben würde, wo Abfragen darauf zu tun. Lassen Sie uns das als ein Beispiel verwenden ...MariaDB dynamische Spalten & JSON?

Angenommen, ich habe ein Feld gefragt, welche Art von Sport Sie mögen (und es ist ein Kontrollkästchen).

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

die dann über sports[] Array PHP gesendet werden würde. Ich möchte dann diese nehmen und es zu meiner Datenbank hinzufügen, damit es wie

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

Oder so ähnlich sieht, was könnte ich dann vielleicht

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

gehen Und ich kann nicht scheinen, um herauszufinden Wie man dies richtig macht, ignoriere die Tatsache, dass dieses "Beispiel" tatsächlich einfach gemacht werden könnte, indem man sich anschließt. Ich möchte es mit mariadb dynamischen Spalten machen (zumindest glaube ich, dass ich das will). Ich weiß, dass ich das mit Postgre machen kann.

Antwort

7

Es ist alles hier: https://mariadb.com/kb/en/dynamic-columns/

Die dynamischen Spalten werden in einem echten blob Spalte gespeichert und eingefügt wie folgt aus:

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

Sie würden also nicht json verwenden hier, anstatt die Daten auf diese Weise serialisiert:

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

wird so etwas wie

erzeugen
'hockey', TRUE, 'soccer', TRUE 

Um alle Zeilen für ppl Fußball spielen suchen:

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