2013-03-04 38 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表格