2012-09-13 60 views
-1

如何將php數組存儲在mysql中然後過濾它們?如何在PHP中存儲PHP數組?

例如:

$array = array("a"=>13,"b"=>15,"c"=>17); 

$mysql_val = json_encode($array); 

mysql_query("INSERT INTO bla (`myfield`) VALUES('".$mysql_val."')"); 
      ^- i store data in this way 

當我執行此查詢,我怎麼能進行篩選,排序等呢? 例如,如何選擇b大於10的行?

+0

你爲什麼要用這種方式存儲你的數據? –

+0

因爲我需要一些動力學領域。 –

+0

@TamásSzabó然後創建另一個名爲columns的表,並添加一個名爲'column_type'的列並從那裏開始。 – Ariel

回答

1

不,JSON數據僅僅是針對MySQL的一段文本,所以除了運行通常的文本功能外,它不能處理它。

您必須從數據庫和文本中讀取它們並在PHP級別轉換爲JSON,然後在應用程序中進行排序或篩選。

如果這對您來說至關重要,那麼可以考慮使用NoSQL數據庫,其中很多都是基於本機的JSON。

2

首先您使用的數據庫的錯誤,這就是爲什麼你不能過濾排序等..

你應該爲每個a, b, c一列,那麼你可以使用SELECT * FROM bla ORDER BY a DESC或可能更好地爲您,有一個映射鍵=>值的表。

通過存儲你的數據作爲 MySQL的訪問它,所以你無法排序就可以了。

正確的(標準化)的方式來存儲這些數據,如果你不知道密鑰(場)的名稱是像下面:

bla 
id | name 
-- | ---- 
2 | james 

blaDecorator or blaColumns 
id | blaId | field | value 
1 | 2  | a  | 13 
2 | 2  | b  | 15 
3 | 2  | c  | 17 

如果必須讓您的數據是這樣的(和我看不出有任何理由),那麼你就需要SELECT * FROM bla讀入PHP作爲Array做你的PHP排序

以下資源用於瞭解數據庫標準化:http://www.phlonx.com/resources/nf3/

1

你不知道。

這是一種將數據存儲在數據庫中的可怕方法。將數據存儲爲列並將數據庫用作數據庫。

但是,如果你一定要使用PostgeSQL。請參閱:http://blog.redfin.com/devblog/2012/03/json_in_postgres.html

PostgeSQL的最新版本具有查詢json字符串中的數據並對其進行連接的功能。

2

這是數據庫正常化的原因,特別是第一種正常形式,避免重複組。通過以原子方式存儲數據(數據不能分解爲更小的部分),您可以對數據執行操作。

1

也許您應該考慮使用像MongoDB這樣的文檔數據庫,如果您想將數據存儲爲json。有了它,你將能夠搜索,過濾等您的JSON數據內

0

不要存儲這樣的數據! 製作3個字段並將數據存儲在這些字段中。

例子:

$array = array("a"=>13,"b"=>15,"c"=>17); 
$fields = array_keys($array); 

mysql_query(
"INSERT INTO bla (" . explode(',', $fields) . ") 
VALUES('" . explode(',' $array) . "')"); 
+0

但是這不創建字段。 –

0

雖然所有的應答者質疑使用DB的。在適當的情況下有實際的用例。我現在面臨這樣一個問題,這是我的解決方案:

function prepareArrayToSave($array) { 
    return (implode("", array_map("numberPad", $array))); 
} 

function numberPad($i) { 
    return sprintf("%03d", $i); 
} 

保存現場Decimal(64)

限制是:

  1. 在陣列的每個值不能大於999;
  2. 任何數組的值不得超過21。