$[*]
獲取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
,性能將受益於索引。您的問題中沒有足夠的信息來建議該表的外觀。
所有你擁有的是「公司」,「價格」對?使用兩列,而不是JSON。 –