2013-03-04 36 views
0

這似乎很多人都很基本,但我正在努力讓我的頭腦圍繞這一點。努力讓我的頭腦創造使用MySQL數據創建PHP陣列

我有一個MySQL表看起來是這樣的:

| email  | name  | mod1 | mod2 | mod3 | mod4 | mod1r | mod2r | mod3r | mod4r | 
| [email protected] | Joe Bloggs | 401 | 402 | 405 | 410 | yes | no | no | no | 
| [email protected] | Alex Baines | 401 | 404 | 407 | 409 | no | yes | yes | no | 
| [email protected] | Rick Summer | 403 | 406 | 408 | 409 | no | no | no | no | 

最後四列涉及到的前四(所以mod1r對​​應於MOD1,mod2r到的Mod2等)。

我需要做兩方面是:

  • 1:確定其中記錄有一個或多個最終四列的

  • 2「是」:確定在前面的數據四列與「是」數據相對應。

  • 3:顯示結果以表格

所以在上面的例子中,裏克·夏季應該完全拋棄,因爲他已經沒有「是」的數據。 Joe Bloggs應該顯示一次值爲'401',因爲他在'mod1r'列中有一個yes,'mod1'中的對應值是'401'。 Alex Baines應顯示兩次,一次顯示值爲'404',另一次顯示值爲'407'。

我想最終的輸出看起來像這樣(在HTML表格):

| Name  | Module | 
| Joe Bloggs | 401  | 
| Alex Baines | 404  | 
| Alex Baines | 407  | 

誰能幫助?我假設我需要使用多維數組來拉取數據,但我正在努力弄清楚如何去做。

謝謝!

+0

小評論:'modXr'似乎是一個布爾值。在這種情況下,最好將它編碼爲'0/1',這將更快更容易處理。 – fedorqui 2013-03-04 11:39:17

+2

如果您的數據庫[規範化](http://en.wikipedia.org/wiki/Database_normalization),這將變得更容易。 – 2013-03-04 11:39:46

+0

謝謝fedorqui,注意到並將作出更改 – Chris 2013-03-04 11:40:10

回答

0

正如其他人所提到的,我肯定會規範化數據庫結構,因此您有三個表格而不是一個表格。

用戶:

user_id email  name 
1  [email protected] Joe Bloggs 
2  [email protected] Alex Baines 
3  [email protected] Rick Summer 

模塊:

module_id modules 
1   401 
2   402 
3   403 
4   404 
5   405 
6   406 
7   407 
8   408 
9   409 
10   410 

users_modules:

user_id module_id 
1  1 
2  4 
2  7 

這使得它更容易得到你想要的陣列,它避免了未來的頭痛,如果你需要添加更多模塊。以下查詢將以您想要的方式返回數據。

SELECT u.name, m.module 
FROM users u 
INNER JOIN users_modules um ON u.user_id = um.user_id 
INNER JOIN modules m ON um.module_id = m.module_id 
0

粗糙實現的想法:

For all query results as row: 
    For all modules as currentModule: 
     if (row[currentModule + 'r']): 
     outputLine(row['name'], row[currentModule]); 

雖然你真的應該考慮從表中刪除這些模塊列,並創建列user_idmodule_id而不是表。他們你可以做這樣的事情,並會直接從數據庫中獲取你的結果:

SELECT u.name, m.module_id module 
FROM  users u 
JOIN  users2modules m ON u.id = m.user_id 
ORDER BY u.name ASC 
+0

Thanks Till,所以一旦我對數據庫進行了更改,那麼我該怎麼做? – Chris 2013-03-04 11:45:34

+0

@Chris看看這裏:http://dev.mysql.com/doc/refman/5.0/en/join.html – AmazingDreams 2013-03-04 11:46:11

1

試試這個

select name ,mod1 as module from Table1 where mod1r = 'yes' 
    union all 
    select name ,mod2 from Table1 where mod2r = 'yes' 
    union all 
    select name ,mod3 from Table1 where mod3r = 'yes' 
    union all 
    select name ,mod4 from Table1 where mod4r = 'yes' 

輸出:

NAME   MODULE 
Joe Bloggs  401 
Alex Baines 404 
Alex Baines 407 

DEMO HERE

而是寫整個代碼,這你應該做你自己或看看這裏Use PHP to Display MySQL Results in HTML Table如何使用mysqli創建html表格