php как хранить и читать данные json через mysql?

php как хранить и читать данные json через mysql?

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))"); 

то как обновить значение data ? считывать данные, а затем вставлять их с помощью процесса json_encode и декодирования или только для простого обновления?

 [{"id": "1", "value": "yes"}] 

затем вставьте другое изменение в [{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}]

Или даже если длинное длинное значение.

[{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"}]

затем обновите еще один, измените на [{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"},{"id": "10001", "value": "yes"}]

Я хочу спросить, как сделать эту обработку запросов mysql более мудрой и эффективной? Спасибо за большее предложение.

Solutions Collecting From Web of "php как хранить и читать данные json через mysql?"

Технически, вы идете не так с этим. MySQL используется для хранения каждого вашего ID / VALUE отдельно. Ради того, чтобы НЕ изменять код, мы сначала рассмотрим ваше решение, но потом я объясню «лучший» способ сделать это.

Во-первых, вам нужно сделать JSON как переменную, а не частью вашего SQL:

mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(json_encode('id' => $uid, 'value' => yes)).")");

вместо

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");

Эта первая часть позволит вам, по крайней мере, заменить данные в mysql. Я ПРИНИМАЮ, что ваша таблица имеет идентификатор и что вы будете использовать его для обновления или удаления

Когда вы извлекаете данные, вы можете json_decode $ row ['data'], чтобы вернуть данные из строки и работать с ней. Чтобы обновить его, просто выполните:

mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)

Теперь, для ПРАВИЛЬНОГО способа сделать это:

Правильный способ сделать это будет иметь эти поля в вашей таблице: ID, JSONID, JSONVALUE и вместо этого использовать этот SQL:

SELECT * FROM text WHERE id = $rowid INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue) UPDATE text SET jsonid = $jsonid, jsondata = $jsondata

Это довольно просто, но это позволит вам иметь любое количество записей в вашей базе данных, которые делают его доступным для поиска, индексированием, сортировкой, запросами и т. Д.

Вы можете сделать это более эффективно, НЕ сохраняя JSON в одном поле, но создав надлежащую таблицу MySQL с именами свойств объекта JSON в качестве имен полей.

Хранение текстового кодированного представления ваших данных в базе данных полностью разрушает точку использования баз данных в первую очередь.

Да, но … WordPress хранит множество своих данных в виде закодированных строк JSON, таких как пользовательские возможности. Хранение массива в виде дискретного бита данных приводит к необходимости делать несколько чтений в базе данных и позволяет получать много данных на одном чтении. Если вы никогда не видите необходимости SELECT отдельных частей строки JSON, я не понимаю, почему это неприемлемо для этого. MySQL должен думать так же, потому что у него есть функции, позволяющие SELECT по отдельным полям в строке JSON, если вы этого пожелаете (см. Ключевое слово MySQL EXPLAIN). Но я согласен, если вы собираетесь делать много SELECT на поле, у него должен быть свой собственный. Все зависит от того, как вы собираетесь использовать данные.