左连接表ON行与JSON值?

时间:2012-08-18 20:44:42

标签: mysql json

这个很难,我有两个表需要加入特定行,问题是第一个表行是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,没有任何线索。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

请注意,这不会起作用 - 这只是为了证明这有多么难看。

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