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    |

最後の 4 つの列は、前の 4 つの列に関連しています (したがって、mod1r は mod1 に、mod2r は mod2 に、などに対応します)。

私がする必要があるのは2つあります:

  • 1: 最後の 4 つの列の 1 つ以上に「はい」が含まれているレコードを特定します。

  • 2: 「はい」のデータに対応する前の 4 つの列のデータを特定します。

  • 3: 結果を表に表示する

したがって、上記の例では、Rick Summer は「はい」のデータがないため、完全に破棄する必要があります。Joe Bloggs は、'mod1r' 列に yes があり、'mod1' の対応する値が '401' であるため、'401' の値で 1 回表示されるはずです。Alex Baines は 2 回表示される必要があります。1 回目は値「404」、2 回目は値「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を使用してMySQLの結果をHTMLテーブルに表示 するmysqliを使用してhtmlテーブルを作成する方法

于 2013-03-04T11:53:48.070 に答える
0

他の人が言ったように、私は間違いなくデータベース構造を正規化するので、1 つではなく 3 つのテーブルがあります。

ユーザー:

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 に答える
0

大まかな実装のアイデア:

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

user_idただし、これらのモジュール列をテーブルから削除し、代わりに列を持つテーブルを作成することを検討する必要がありますmodule_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 に答える