这似乎很容易,但尚未找到神奇的搜索词。
一张表
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有点新,可能有一种更简单的方法。
希望更有意义,谢谢!
答案 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