有一列表,其中有一列,名爲「info」,其內容類似於{"Twitter": 28, "Total": 28, "Facebook": 1}
。當我編寫sql時,我想測試「Total」是否大於10。有人可以幫我寫查詢嗎? (表名是landslides_7d
)帶有{「Twitter」:28,「Total」:28,「Facebook」的mySQL表格:1}
(這就是我)
SELECT * FROM landslides_7d WHERE info.Total > 10;
感謝。
有一列表,其中有一列,名爲「info」,其內容類似於{"Twitter": 28, "Total": 28, "Facebook": 1}
。當我編寫sql時,我想測試「Total」是否大於10。有人可以幫我寫查詢嗎? (表名是landslides_7d
)帶有{「Twitter」:28,「Total」:28,「Facebook」的mySQL表格:1}
(這就是我)
SELECT * FROM landslides_7d WHERE info.Total > 10;
感謝。
您可能正在將JSON存儲在單個Blob或字符串列中。這是非常低效的,因爲您無法使用索引,並且需要在每個查詢處解析整個JSON結構。我不確定你需要多少靈活性,但是如果JSON屬性相對固定,我建議在表格內容上運行一個腳本(ruby,Python等)並將「total」存儲爲傳統的列式格式。例如,您可以添加一個新的「total」列,其中包含total屬性作爲INT。
使用腳本的一個好處是,您可以捕獲任何格式不正確的JSON,這是您在單個查詢中無法做到的。
您還可以使用@johannes答案中引用的JSON_EXTRACT函數,通過觸發器(在更新/插入「info」時)保持「total」列。
如果'JSON_EXTRACT'可用,你很可能在MySQL 5.7上。然後,您可以使用生成的列而不是手動觸發器,這需要較少的存儲空間(只存儲索引)並且可靠(數據庫能夠理解目的)http://mysqlserverteam.com/generated-columns-in-mysql- 5-7-5 / – johannes
數據格式似乎是JSON。如果你有MySQL 5.7,你可以使用JSON_EXTRACT
或簡稱->
。這些功能在舊版本中不存在。
SELECT * FROM landslides_7d WHERE JSON_EXTRACT(info, '$.total') > 10;
或
SELECT * FROM landslides_7d WHERE info->total > 10;
見http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract
記住,這是一個全表掃描。在一個「較大」的表上你想創建一個索引。
如果您使用的是較舊版本的MySQL,則應在表格中創建一個額外的列並手動將總值添加到該列。
當你說'我想測試'時,你究竟是什麼意思?你想要一個*列表*的所有行'總計'是> 10?或者,計算有多少行?或者,給定一行,你是否想要一個「true/false」值來判斷行是否符合這個標準? –
我想要一個總計> 10的所有行的列表 –
您的表格必須至少有2列。你是通過某種JSON工具或API生成器來提取數據嗎? –