2011-03-26 70 views
0

我正在製作一個應用程序,用戶可以註冊課程。一個用戶可以註冊多個課程,最後我感興趣的數據看起來像這樣。mysql和php如何存儲信息

array(
    0 => array(
     0    => 12, // 0 is nothing 12 is the course id which i use to refference 
     'date_joined' => 1301123384 // when the user joined the course 
     ), 
    1 => array(
     0    => 52, // the same as above 
     'date_joined' => 1301123384 
     ) 
) 

我還需要主數組的鍵來確定用戶加入的順序。 要存儲它,我將它序列化爲一個字符串並將其保存在數據庫中。
這是一個好方法嗎?
它可以做不同嗎?更好?
我並不需要一個MySQL查詢我需要知道,如果不是一個數組轉換爲一個字符串

回答

2

不,這絕對不是你應該如何存儲它。您需要規範化數據庫設計,以便使用查詢來完成工作。如果你序列化它,你將無法查詢它(以傳統的方式,至少)。下面是一個更好的模式

Students : sid | s_name | more | person | data | created | 
Courses : cid | course_no | c_name | some | more | info | created 
Students_Courses : id | sid | c_id | created 

其分解

您有學生信息和課程信息的課程表中的學生表。他們有一個與SID和CID的連接表,以創建一個唯一的密鑰。這將讓您查詢學生所屬的課程以及訂閱課程的所有學生。由於您有created列,因此您可以將其用於ORDER BY,以便知道哪些課程優先。

+0

好吧,我明白了,謝謝! – andrei 2011-03-26 07:57:00

0

爲什麼不使用有三列
1)user_id說明
2)表該信息可以以其他方式存儲subject_id
3)加入日期
並將其存儲在那裏?如果序列化並存儲數組,則無法輕鬆進行查詢。例如 - 讓人們註冊某個主題的日期。

0

序列化並將數據結構存儲爲字符串當然是一種非常糟糕的方式。

您應該使用關係表來存儲這些數據。

例如,您可以創建一個包含3列(user_id,course_id和join_date)的course_attendees表。 Join_date可用於跟蹤課程訂購的順序。

這將幫助您更有效地查詢表,而不是編寫代碼來將字符串序列化並將其反序列化爲數據結構。