2011-06-28 81 views
0

我的陣列看起來像這樣:如何在MySQL數據庫中存儲嵌套/多維數組中的值?

Array 
( 
[0] => Array 
    (
     [created_at] => Sat Jun 25 21:22:20 +0000 2011 
     [text] => i'm eating apple 
     [sender] => Array 
      (
       [name] => mark o 
       [created_at] => Wed May 28 18:21:03 +0000 2008 
      ) 
     [recipient] => Array 
      (
       [created_at] => Mon Jun 21 19:48:50 +0000 2010 
       [screen_name] => playassassin 
      ) 
     [sender_screen_name] => mark 
     [recipient_screen_name] => james 
    ) 

[1] => Array 
    (
     [created_at] => Mon Jun 20 10:52:37 +0000 2011 
     [text] => My bday in 5 minutes 
     [sender] => Array 
      (
       [name] => mark o 
       [created_at] => Wed May 28 18:21:03 +0000 2008 
      ) 
     [recipient] => Array 
      (
       [created_at] => Mon Jun 21 19:48:50 +0000 2010 
       [screen_name] => james 
      ) 
     [sender_screen_name] => mark 
     [recipient_screen_name] => james 
    ) 
) 

這是從微博API直接消息進料的簡化版本。我會每隔X分鐘使用PHP和Twitter異步庫請求最新的DM,然後我想將數組的一部分存儲在數據庫表中。每個DM應該存儲在自己的行中。
數據將被存儲在表:

CREATE TABLE `dms` (
    `postid` INT(12) NOT NULL, 
    `text` VARCHAR(140) NOT NULL COLLATE 'utf8_unicode_ci', 
    `sender` VARCHAR(20) NOT NULL COLLATE 'utf8_unicode_ci', 
    `sender_id` VARCHAR(20) NOT NULL COLLATE 'utf8_unicode_ci', 
    `date_created` DATETIME NOT NULL 
) 

我真的不知道如何去這樣做的,將不勝感激一些幫助。

如果它簡化了所有事情,我只需要從第二層中提取值。另外,我不知道要添加多少行。


我一直在瞎搞,這幾乎代碼做什麼,我需要:

foreach ($adms as $dm) { 

    foreach ($dm as $key => $value) { 
     $q = "INSERT INTO dms SET text = '{$value}'"; 
     mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 
    } 

} 

當然,這只是存儲在「文本」列在新行中的每個二級值。如果你能幫我完成我所要求的事情,我會標記你的答案。

+0

原油的方法是使用序列化() – 2011-06-28 09:14:27

+0

也許這類似的問題將幫助別人設計一個答案:[鏈接](http://stackoverflow.com/questions/4485255/insert-unknown-number-of-rows-into-mysql-using-php) – David

+0

也許我可以用這種方式表達我認爲我需要的東西:對於每個第一級數組,我想向表中添加一行用第二級數組中的特定值直到所有第一級數組都被處理。 – David

回答

2

那麼......你只輸入一個值。

嘗試這樣: -

foreach ($adms as $dm) { 
    $q = "INSERT INTO dms(text, sender, sender_id, date_created) values('".$dm["text"]."', '".$dm["sender_screen_name"]."', '".$dm["sender"]["name"]."', now())"; 
    mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 
} 
+0

謝謝。我真的很驚訝地發現我自己,但你值得信任。 – David

1

定義parent_postid,所以插入父,得到它的ID並使用該ID在parent_postid

CREATE TABLE `dms` (
    `postid` INT(12) NOT NULL, 
    `parent_postid` INT(12) NOT NULL, 
    `text` VARCHAR(140) NOT NULL COLLATE 'utf8_unicode_ci', 
    `sender` VARCHAR(20) NOT NULL COLLATE 'utf8_unicode_ci', 
    `sender_id` VARCHAR(20) NOT NULL COLLATE 'utf8_unicode_ci', 
    `date_created` DATETIME NOT NULL 
) 

這是可以做到很多正水平插入子記錄......和每個子可父母等......

0

你想達到什麼也被稱爲粉碎,例如xml粉碎。基本的想法是將你的數組想象成一棵樹。將信息作爲樹存儲後,可以將每個節點存儲在線性表中。與每個節點(即包含的信息)一起,您將存儲其父/子關係以及您需要恢復初始結構的任何內容。

+0

我不在乎保留結構。我只想在數據庫中存儲一些元素。我認爲一個foreach循環可能是要走的路,但我不確定,不知道如何編寫它。 – David

相關問題