这个很难,我有两个表需要加入特定行,问题是第一个表行是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,没有任何线索。 任何帮助表示赞赏。
答案 0 :(得分:2)
...这就是您不在单个SQL字段中存储结构化数据的原因。它否定了关系数据库的整个目的。
除非你有一个包含JSON解析器的数据库,否则你有两个选择:
a)查找/提取特定键/值对的不可靠的字符串操作
b)将json插入客户端,CAN解析回本机,提取所需的键/值,然后使用其他ID字段进行实际连接。
SELECT ...
LEFT JOIN ON SUBSTR(jsonfield, POSITION('"id:"', jsonfield)) etc...
无论哪种方式,它都会完全破坏性能,因为您无法在这些计算/派生值上使用索引。
请注意,这不会起作用 - 这只是为了证明这有多么难看。
修复表 - 规范化设计,不存储从中提取数据所需的JSON数据。放入一个json字符串是一回事,你只能完全获取/更新它。拥有一个你需要加入其子值的东西是完全不同的。