2012-12-07 49 views
0

我的數據庫是MySQL,我發現沒有JSON類型,但只有文本。但在我的情況下,我需要在JSON數據的哈希鍵上存儲JSON數據的含義和使用索引。所以'文本'類型是不正確的。順便說一下,我無法將JSON數據分成不同的列,因爲我不知道JSON中的密鑰是什麼。我需要使用索引mysql中的json數據的列

我真正需要的是通過使用索引或某事在MySQL的JSON鍵搜索JSON數據的解決方案,因此搜索速度可能會快的和可接受的。

+4

請不要在你的文章上簽名。這就是你的名字和聲譽的徽章是什麼。除非您的斜體陳述實際上是問題的一部分,否則我們無法幫助您。 –

+0

你能發佈一個格式化的例子JSON嗎? –

+0

或者你可以使用PostgreSQL 9.4(目前RC1),它們支持GIN的JSONB數據:3 – Kokizzu

回答

0

select concat('{"objects\":[' ,(select group_concat( concat('{"id":"',id, '","field":"',field,'"}') separator ',') from placeholder) ,']}');

再說了通用將需要動態SQL

+0

我真正需要的是通過使用索引或某物的JSON鍵搜索JSON數據的解決方案,因此搜索速度可能會快accaptable但仍然真的要求我們的善良。 – Wooden

0

我覺得你的局勢要求Levenshtein Distance algorithm。您基本上需要用文本片段(針頭)對未知量(乾草堆)進行文本搜索。而且你需要它很快,因爲索引是不可能的。

有MySQL的,由此可以創建User-Defined Functions一個鮮爲人知的(或很少使用在任何速率)的能力。該函數本身是一個存儲過程,爲了加快速度,它可以用C++編譯。 UDF的使用在你的查詢中本地使用,就好像它們是常規MySQL語法的一部分一樣。

這裏是實現MySQL中的Levenshtein User-Defined Function細節。

示例查詢可能是......

SELECT json FROM my_table WHERE levenshtein('needle') < 5; 

5指的是「編輯距離」,實際上允許近場比賽被找到。

1

如果您不能正常化您的數據到RDBMS可讀的格式,你不應該使用MySQL。

一個NoSQL數據庫可能是更好的辦法。 MySQL的強項是使用關係數據。

你正試圖通過一個圓孔適合一個正方形的對象:)

相關問題