2011-12-08 218 views
0

我有以下的MySQL數據庫行。PHP從一個mysql Row的列創建一個多維數組?

id | user_id | title_1|desc_1|link_1|title_2|desc_2|link_2| 

等多達10

從這一行我想刪除ID和用戶ID,並有導致多維數組。

主要問題是iterarating由我的查詢返回的關聯數組過來,它分裂成的3

Array = (

[0] = array (
    [tite_1] => 'sometitle' 
    [desc_1] => 'description' 
    [link_1] => 'a link' 
) 
    [1] = array (
    [tite_2] => 'sometitle' 
    [desc_2] => 'description' 
    [link_2] => 'a link' 
) 

和數組等等我怎麼能做到這一點我很爲難!?

+7

這是非常差的數據庫設計。你應該真的在尋找一個更好的設計,以適應這一點。 – Jon

回答

2

正確的答案是重新設計您的數據庫使用第三範式。在進一步做任何事之前,你可能應該放下一切並閱讀數據庫規範化。

適當的設計會是這樣的:每個用戶

CREATE TABLE user_has_links (
    id INT PRIMARY KEY, 
    user_id INT, 
    title TEXT, 
    description TEXT, 
    link TEXT 
) 

存儲多個鏈接,您只需在每個鏈接表創建一個新的行。

3

你可能想你的表結構爲兩個表是這樣的:

parent(id, user_id, more_fields, whatever_you_need_here) 

child(parent_id, title, desc, link) 

現在,這將是很容易得到你想擁有的數據。

SELECT title, desc, link FROM child WHERE parent_id = 12; 

當然,parentchild應適當命名的,例如userlinks

+0

爲什麼不在1數據庫中只有parent_id字段? – Stoosh

+0

Michael,Jon,Middus,Kenaniah你們都是對的。我已經開始了對Normalization的研究,這是非常好的建議,謝謝大家。擺脫Kenaniah表女巫只是一個表似乎是正確的事情,我不明白爲什麼我需要一個父表和一個孩子,我想也許只有當我想告訴父母有多少行希望從兒童?你們有什麼感想? – Luis

+1

在您當前的設計中,如果您甚至需要第三個鏈接,那麼您需要ALTER TABLE並添加列。那麼如果你需要第四個鏈接,你將不得不再次改變表格。如果您將鏈接存儲在子表中,則更容易,因爲您只需爲每個用戶添加儘可能多的行。 –

2

這裏真正的解決方案是修復您的數據庫以將這些列標準化爲其他表格。但是,如果您無法修復數據庫,則此代碼將執行以下任務:

// $output will hold your full result set 
$output = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    // For each row returned, add a new array to $output 
    $output[] = array(
    // The new array consists of 10 sub-arrays with the correct 
    // keys and values 
    array (
     "title"=>$row['title1'], 
     "desc"=>$row['desc1'], 
     "link"=>$row['link1'] 
    ), 
    array (
     "title"=>$row['title2'], 
     "desc"=>$row['desc2'], 
     "link"=>$row['link2'] 
    ), 
    ..., 
    ..., 
    array (
     "title"=>$row['title10'], 
     "desc"=>$row['desc10'], 
     "link"=>$row['link10'] 
    ) 
); 
} 
+0

雖然這是一個「繁文fix節修復」。正如你所看到的,把事情弄糟很容易。一個錯字和* boom *;)。正如邁克爾,喬恩和其他人所說的那樣:儘可能規範化數據庫。 – middus

+0

對不起,併發編輯出錯了。我只是修正了'/ title1/title2',並不意味着刪除你的評論。 – middus

+0

@middus我修好了,沒關係 –