MySQL PHP:基于列返回行


MySQL PHP: Return rows based on a column

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

一张桌子

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

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

希望这更有意义,谢谢!

这是一个数据透视表。 您可以查看此内容以获取帮助。 http://www.artfulsoftware.com/infotree/queries.php#787

我想

,你可以在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"。我认为这基本上是你想要的。

关注怎么样?

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部分,因为我认为这将是动态的。

如下所示的内容应该会有所帮助:

选择"user_id",GROUP_CONCAT(ID(作为MOD_ID,GROUP_CONCAT(mod_number(作为MOD_Number按user_id分组