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 более мудрой и эффективной? Спасибо за большее предложение.
Технически, вы идете не так с этим. 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 на поле, у него должен быть свой собственный. Все зависит от того, как вы собираетесь использовать данные.