【问题标题】:Left join table ON row with JSON values?左连接表 ON 行与 JSON 值?
【发布时间】:2012-08-14 20:47:15
【问题描述】:

这个很难,我有 2 个表需要在特定行上加入,问题是第一个表行是 json 值

这是表项中的 json 行

[{"id":"15","value":"News Title"},{"id":"47","value":"image1.jpg"},{"id":"33","value":"$30"}]

这是我需要加入 json ID 并获取实际属性名称的表属性,例如 Title 、 Image 、 Price

id      Name
15      Title
47      Image
33      Price

所以开始是

SELECT item_values FROM ujm_items 
LEFT JOIN?????
 WHERE category = 8 AND published = 1 ORDER BY created DESC

但在 json 上留下 join ,不知道。 任何帮助表示赞赏。

【问题讨论】:

  • 我很确定这是不可能的,因为数据的存储方式。可以进行一些字符串匹配,但是会很慢。
  • 我是这么认为的,谢谢

标签: mysql json


【解决方案1】:

...这就是为什么您不将结构化数据存储在单个 SQL 字段中的原因。它否定了关系数据库的全部目的。

除非您有一个包含 JSON 解析器的数据库,否则您有两种选择:

a) 查找/提取特定键/值对的不可靠字符串操作

b) 将 json 插入一个客户端,该客户端可以解析回本机,提取所需的键/值,然后使用其他一些 ID 字段进行实际连接。

SELECT ...
LEFT JOIN ON SUBSTR(jsonfield, POSITION('"id:"', jsonfield)) etc...

无论哪种方式,它都会完全破坏性能,因为您不能对这些计算/派生值使用索引。

请注意,这不会按原样工作 - 它只是为了证明这会变得多么丑陋。

修复您的表格 - 规范化设计,不要存储您需要从中提取数据的 JSON 数据。放入一个您只能完全获取/更新的 json 字符串是一回事。有一个你需要加入其中的子值是完全不同的事情。

【讨论】:

  • 谢谢输入,但老实说,我不确定为什么每个人从一开始就假设我们实际上制作了这样的表格。这是我参与的一个客户项目,我个人永远不会做出这样的结构。
  • 因为总是这样。最好的想法是说“这是我客户的垃圾 - 他们是白痴,我会设计得更好”。我们都必须处理这个问题。
猜你喜欢
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多