1

这个很难,我有 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 ,不知道。任何帮助表示赞赏。

4

1 回答 1

2

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

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

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

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

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

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

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

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

于 2012-08-18T20:50:53.850 回答