MySQL PHP:根据列返回行

时间:2012-05-17 05:54:32

标签: php mysql

这似乎很容易,但尚未找到神奇的搜索词。

一张表

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个)。

我知道该怎么做的连接,重新排列的值会让我感到沮丧。

任何帮助或方向都会很棒,谢谢! :)

====================== 修改

希望downvote缺乏清晰度而非质量问题 - 让我试着更好地解释。

这是在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都是用户。我需要将其形成一个数组,其中每行是一个用户,并且还包含每个模块的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 dev有点新,可能有一种更简单的方法。

希望更有意义,谢谢!

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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'。我认为这基本上就是你想要的。

答案 2 :(得分: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编程生成IF ID_M部分,因为我认为这将是动态的。

答案 3 :(得分:0)

以下内容应该有所帮助:

将SELECT_id,GROUP_CONCAT(ID)作为MOD_ID,GROUP_CONCAT(mod_number)作为MOD_Number FROM GROUP BY user_id