簡體   English   中英

MySql 5.7按鍵json_extract

[英]MySql 5.7 json_extract by key

我有一張桌子,如下所示:

表數據

id params
1  {"company1X":{"price":"1124.55"},"company2X":{"price":"1,124.55"},"company3X":{"price":""},"company4X":{"price":""},"company5X":{"price":"1528.0"}}

我不知道在我的請求中使用“公司”的名稱。

如何獲取按價格訂購的數據? 謝謝!

PS我試過從數據中選擇json_extract(params,'$ [*] .price')但它不起作用(返回空值)。

$[*]獲取JSON數組的所有元素,而不是對象。 這是一個對象,所以你得到NULL。

$.*將獲取JSON對象中的所有元素,因此$.*.price您提供所有價格的JSON數組。

mysql> select json_extract(params, '$.*.price') from foo;
+-------------------------------------------+
| json_extract(params, '$.*.price')         |
+-------------------------------------------+
| ["1124.55", "1,124.55", "", "", "1528.0"] |
+-------------------------------------------+

現在有一個問題。 就SQL而言,這是一行。 它不能按正常order by排序,對行有效。

MySQL沒有排序JSON的功能......所以你被困住了。 您可以返回JSON數組,並讓接收數據的任何內容進行排序。 您可能可以編寫存儲過程來對數組進行排序......但是,支持糟糕的表設計需要做很多工作。 而是,更改表格。


真正的問題是這是對JSON列的錯誤使用。

JSON列擊敗了SQL數據庫的大部分內容(在PostgreSQL中更少,JSON支持更好)。 SQL數據庫使用行和列,但JSON將多行和列推入單個單元格。

因此,應謹慎使用JSON列; 通常當您不確定需要存儲哪種數據時。 將要搜索和排序的“價格”等重要信息應作為普通列進行。

您需要將表更改為普通的SQL表,其中包含公司名稱和價格的列。 然后,您可以使用正常的SQL功能,如order by ,性能將從索引中受益。 您的問題中沒有足夠的信息來表明該表可能是什么樣子。

暫無
暫無

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

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