0

これは簡単に思えますが、魔法の検索用語はまだ見つかりません。

1つのテーブル

ID | UserID | Mod_number

1      43      1
2      43      2
3      43      3 
4      43      4
5      55      1
6      55      2

次のようなクエリを返したいです。

UserID | Mod_1&ID | Mod_2&ID ....  [EDITED below]

43     |   1&1    |  2&2 ....
55     |   1&5    |  2&6 .... 

Mod番号は固定されています(7つあります)。

私が行う方法を知っている連結、それは私をつまずかせる行に値を再配置することです。

どんな助けや方向性も素晴らしいでしょう、ありがとう!:)

====================== 編集:

反対票が質問の質よりも明確さの欠如であったことを願って-もっとよく説明しようと思います。

これは、Joomlaで開発されている評価ツール用です。各モジュール(セクション)は、スーパーバイザーによってチェックオフされます。その場合、ID、UserID、およびModIDが(他のデータの中でも)記録されます。

その結果、次のようなテーブルになります。

ID | UserID | Mod_number

1      43      1
2      43      2
3      43      3 
4      43      4
5      55      1
6      55      2
7      61      2
8      61      4

各UserIDはユーザーです。これを配列に形成する必要があります。各行は1人のユーザーであり、各モジュールのIDも含まれています。このプレゼンテーションはより明確になると思います(連結をスキップします):

UserID | ID_M1 | ID_M2 | ID_M3 |ID_M4

43     |   1    |   2  |   3   |   4
55     |   5    |   6  |  
61     |        |   7  |       |   8

これで、行ごとに1つの一意のUserID(キーと見なすことができます)があり、モジュール番号ごとにIDが記録されます。おそらくのような配列としてarray(UserID=>array(ID_M1, ID_M2, ID_M3, ID_M4))。しかし、そのデータをこれに取り込むことは私を困惑させます。

また、データの構造化について他に提案があれば、聞きたいです。私はphp / mysql / Joomla devに少し慣れていないので、これを行う簡単な方法があるかもしれません。

それがもっと理にかなっていることを願っています、ありがとう!

4

4 に答える 4

2

これはピボットテーブルです。あなたは助けのためにこれを見ることができます。http://www.artfulsoftware.com/infotree/queries.php#787

于 2012-05-21T01:06:12.700 に答える
1

本当に醜いクエリを書いて、GROUP BY UserID複雑な文字列操作を行うことができると思います。ただし、このデータをそのまま取得してから、PHPで配列に再構築する方がよいでしょう。

$rows; // say this is an array direct from the db with id, user_id, mod_id fields
$grouped = array(); // we will build this array from your data

foreach ($rows as $row)
{
    if (!isset($grouped[$row['user_id']]))
    {
        $grouped[$row['user_id']] = array();
    }

    $grouped[$row['user_id']]['mod_' . $row['mod_id']] = $row['id'];
}

これが実行されると、user_idでキー設定された配列が作成され、「mod_1」、「mod_2」などのキーが設定された配列が含まれます。値は「id」です。これは基本的にあなたが望むものだと思います。

于 2012-05-17T06:08:30.260 に答える
1

フォローしてみませんか?

SELECT 
UserID,
IF (ID > 0 && Mod_Number = 1, ID, null) ID_M1,
IF (ID > 0 && Mod_Number = 2, ID, null) ID_M2,
IF (ID > 0 && Mod_Number = 3, ID, null) ID_M3,
IF (ID > 0 && Mod_Number = 4, ID, null) ID_M4
from <YourTable>

ここでは、動的になると思うので、PHPからプログラムで生成できるIFID_M部分を示します。

于 2012-05-21T10:49:53.833 に答える
0

以下のようなものが役立つはずです:

SELECT user_id、GROUP_CONCAT(ID)as MOD_ID、GROUP_CONCAT(mod_number)as MOD_Number FROM GROUP BY user_id

于 2012-05-17T06:21:20.537 に答える