0

这对很多人来说似乎很基本,但我正在努力解决这个问题。

我有一个看起来像这样的 MySQL 表:

| email       | name        | mod1 | mod2 | mod3 | mod4 | mod1r | mod2r | mod3r | mod4r |
| jb@test.com | Joe Bloggs  | 401  | 402  | 405  | 410  | yes   | no    | no    | no    |
| ab@test.com | Alex Baines | 401  | 404  | 407  | 409  | no    | yes   | yes   | no    |
| rs@test.com | Rick Summer | 403  | 406  | 408  | 409  | no    | no    | no    | no    |

最后四列与前四列相关(因此 mod1r 对应于 mod1,mod2r 对应于 mod2 等)。

我需要做的是双重的:

  • 1:确定哪些记录在最后四列中的一列或多列中有“是”

  • 2:识别前面四列中与“是”数据对应的数据。

  • 3:在表格中显示结果

所以在上面的例子中,Rick Summer 应该被完全丢弃,因为他没有“是”的数据。Joe Bloggs 应该显示一次,其值为“401”,因为他在“mod1r”列中有一个“是”,而“mod1”中的相应值为“401”。Alex Baines 应该显示两次,一次是“404”,另一次是“407”。

我希望最终输出看起来像这样(在 HTML 表中):

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

任何人都可以帮忙吗?我假设我需要使用多维数组来下拉数据,但我正在努力弄清楚如何去做。

谢谢!

4

3 回答 3

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

在这里演示

但是要编写整个代码,你应该自己做或者看看这里使用 PHP 在 HTML 表中显示 MySQL 结果 如何使用 mysqli 构建 html 表

于 2013-03-04T11:53:48.070 回答
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
于 2013-03-04T11:42:35.733 回答
0

正如其他人所提到的,我肯定会规范化数据库结构,所以你有三个表而不是一个。

用户:

user_id  email        name
1        jb@test.com  Joe Bloggs
2        ab@test.com  Alex Baines
3        rs@test.com  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

用户模块:

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
于 2013-03-04T12:29:57.947 回答