0

这看起来很简单,但还没有找到神奇的搜索词。

一张桌子

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、一个用户 ID 和一个 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 都是一个用户。我需要将其形成一个数组,其中每一行是一个用户,并且还包含每个模块的 ID。我认为这个演示文稿可能更清楚(跳过串联):

UserID | ID_M1 | ID_M2 | ID_M3 |ID_M4

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

因此,现在每行都有一个唯一的 UserID(可以被认为是一个键),并为每个模块编号记录了 ID。作为一个可能看起来像array(UserID=>array(ID_M1, ID_M2, ID_M3, ID_M4)). 但是将这些数据放入其中让我感到困惑。

此外,如果您对构建数据有其他建议,我很乐意听到 - 我对 php/mysql/Joomla 开发人员有点陌生,可能有更简单的方法可以做到这一点。

希望这更有意义,谢谢!

4

4 回答 4

2

这是一个数据透视表。你可以看看这个寻求帮助。http://www.artfulsoftware.com/infotree/queries.php#787

于 2012-05-21T01:06:12.700 回答
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>

这里的 IF ID_M 部分您可以通过 PHP 以编程方式生成,因为我认为这将是动态的。

于 2012-05-21T10:49:53.833 回答
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 回答
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 回答