簡體   English   中英

從聯接的MySQL表中選擇解碼的JSON數據

[英]Select decoded JSON data from joined MySQL tables

如果我有兩個帶有JSON數據的表,您能寫信給我嗎,如何從MySQL數據庫中進行選擇。 其中之一具有以下結構:

Table Trees
(id, name, value) - three columns

其中包括以下數據

1,  trees, [{"name":"Oaktree","value":1,"target":null},{"name":"Appletree","value":2,"target":null},{"name":"Plumtree","value":3,"target":null}]
2,  length, [{"name":"10m","value":1,"target":null},{"name":"15m","value":2,"target":null},{"name":"20m","value":3,"target":null}]
3,  age, [{"name":"5y","value":1,"target":null},{"name":"10y","value":2,"target":null},{"name":"20y","value":3,"target":null}]

第二個表具有以下結構:

Table SelectedTrees
(properties) - only one column

其中包括以下數據

[{"id":"1","value":["1","3"]},{"id":"2","value":["1", "2", "3"]},{"id":"3","value":["2"]}]

這意味着從“樹”表中選擇數據。 in column from coresponds to column from table. coresponds從列。 我想從數據庫中選擇真實的(json_decoded)值,例如:

樹木=橡樹,梅樹

長度= 10m,15m,20m

年齡= 10歲

我該怎么做? 提前致謝。

一月

簡而言之,這是不可能的。 建立關系數據庫是為了快速比較它們可以索引的常數值。 JSON只是MySQL的字符串,任何類型的部分字符串匹配都會觸發所謂的表掃描 ,當您獲取大量數據時,它實際上會變得非常緩慢。

可以把它像這樣工作:

SELECT * FROM Trees
JOIN SelectedTrees
  ON properties LIKE CONCAT('"id":"', Trees.id, '"')

但是,這只是您永遠不希望在任何生產系統中使用的黑客,我建議不要在測試系統中使用它。 而是重構您的數據庫,以使其中永遠不會有要與查詢匹配的 JSON。 將輔助數據存儲為JSON很好,只需確保在插入之前已提取ID和名稱,然后將其插入數據庫表中的單獨列中,以便DB引擎可以發揮其關系魔力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM