带有{“Twitter”的mySQL表:28,“总计”:28,“Facebook”:1}

时间:2016-05-29 23:36:41

标签: mysql

有一个包含一列的表格,名为“info”,内容类似于{"Twitter": 28, "Total": 28, "Facebook": 1}。当我写sql时,我想测试“Total”是否大于10。有人可以帮我写查询吗? (表名为landslides_7d

(这就是我所拥有的)

SELECT *  FROM landslides_7d WHERE info.Total > 10;

感谢。

2 个答案:

答案 0 :(得分:1)

数据格式似乎是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,你应该为你的表创建一个额外的列,并手动将总值添加到该列。

答案 1 :(得分:0)

您可能正在将JSON存储在单个blob或字符串列中。这是非常低效的,因为您无法使用索引,并且需要在每个查询位置解析整个JSON结构。我不确定你需要多大的灵活性,但是如果JSON属性相对固定,我建议在表格内容上运行一个脚本(ruby,Python等)并存储" total"采用传统的柱状格式。例如,您可以添加一个新列" total"其中包含作为INT的total属性。

使用脚本的另一个好处是,您可以捕获任何格式不正确的JSON - 您无法在单个查询中执行此操作。

你也可以保持"总计"使用@johannes answer中引用的JSON_EXTRACT函数,使用触发器(在更新/插入" info")上维护列。