这看起来很容易,但还没有找到神奇的搜索词。
一张桌子
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分组