В соответствии с этим JSON Вставить в таблицу MySQL или обновить, если существует я получил ответ mysql, чтобы вставить / обновить приведенный ниже файл json.
"google",
"20180510",
"{
"gmail_page_viewed" : 12000300,
"search_page_viewed" : 9898884726423
}"
в СХЕМУ
CREATE TABLE TAG_COUNTER (
account varchar(36) NOT NULL,
time_id INT NOT NULL,
counters JSON,
PRIMARY KEY (account, time_id)
)
как показано ниже
INSERT INTO `TAG_COUNTER`
(`account`, `time_id`, `counters`)
VALUES
('google', '20180510', '{"gmail_page_viewed": 1, "search_page_viewed": 1}'),
('google', '20180510', '{"gmail_page_viewed": 1, "search_page_viewed": 1}'),
('google', '20180511', '{"gmail_page_viewed": 1, "search_page_viewed": 1}'),
('google', '20180511', '{"gmail_page_viewed": 1, "search_page_viewed": 1}'),
('google', '20180512', '{"gmail_page_viewed": 1, "search_page_viewed": 1}')
ON DUPLICATE KEY UPDATE `counters` =
JSON_SET(`counters`,
'$."gmail_page_viewed"',
IFNULL(`counters` ->> '$."gmail_page_viewed"', 0) + 1,
'$."search_page_viewed"',
IFNULL(`counters` ->> '$."search_page_viewed"', 0) + 1
);
Однако получить данные из него с помощью group by сложно, поскольку ключ json является динамическим, а не статическим.
Поэтому, если я изменю свой json, чтобы иметь статические ключи (например, page_name, page_visits) в формате ниже, сделать поиск (groupby / orderby) будет легко.
"google",
"20180510",
'{
"gmail_page_viewed" : {"page_name" : "gmail_page_viewed", "page_visits" : 12000300},
"search_page_viewed" : {"page_name" : "search_page_viewed", "page_visits" : 12000300}
}"
Но я не мог понять, как подготовить запрос INSERT ON DUPLICATE KEY UPDATE. Я пытался более 6 часов, но не повезло: либо данные не вставлены должным образом, либо счетчик посещений не обновляется должным образом. иногда цитата добавляется в содержание.
Может ли кто-нибудь помочь мне в этом?
@RaymondNijland Да, я обновил схему в вопросе.
Я не понимаю всей проблемы, но следующий запрос может дать вам некоторые идеи, см. dbfiddle.
@wchiquito Спасибо, я проверю вас. Одна вещь, которую я вижу, обновление включает только посещения страницы, поэтому, когда новый тег появляется после уже записанной / тега, я думаю, не будет обновлять имя, но обновит вас после тестирования.
@wchiquito Спасибо !! и ваше решение почти такое же, как я просил. Но когда учетная запись и time_id совпадают и при попытке вставить новый другой тег, он не обновляется должным образом. Это связано с тем, что для этого первичного ключа уже создана строка, а следующая вставка / обновление строки не выполняется. dbfiddle.uk/…
Попробуйте dbfiddle.
@wchiquito Как обычно выглядит то, что мне нужно. Спасибо!! Одно сомнение, как был добавлен "page_name": "g_page_viewed", если он не входит в состав JSON_SET? есть только упоминание о page_visits после / под разделом JSON_SET.






ON DUPLICATE KEY UPDATEтребует УНИКАЛЬНЫЙ ключ на вашем столе. У вас он есть?