繁体   English   中英

根据隶属关系选择用户ID

[英]Selecting users id based on affiliation to group

我有一个数据库,其中有许多users groups (1:N)。 这两个表被设计为每个组都有一个唯一的ID,每个用户都有一个唯一的ID。 但是现在我遇到一个问题,我需要选择一个组的ID以及该组内用户的ID(这与他的真实数据库ID不同)。 有什么方法可以在MySQL中选择这些子ID,而无需实际更改用户表结构?

我当前的表结构如下所示:

-----------------
| GROUPS        |
=================
| ID PK AUTO_INC|
| NAME          |
| DESCRIPTION   |
| ...other      |
| non-related   |
| columns       |
-----------------

------------------
| USERS          |
==================
| ID PK AUTO_INC |
| NAME           |
| GROUP          |
| AGE            | 
|...other        |
| non-related    |
| columns        |
------------------

编辑 :我想要看起来像这样:

GROUPS
----------------------------------
| ID  | Name | Description | ... |
==================================
| 1   |  A   | First one   | ... |
| 2   |  B   | Second one  | ... |
| 3   |  C   | Third one   | ... |
----------------------------------
USERS
--------------------------------------
| ID  | Name    | Group  | Age | ... |
======================================
| 1   |  John   |   1    | 35  | ... |
| 2   |  Adam   |   1    | 22  | ... |
| 3   |  Bob    |   2    | 18  | ... |
| 4   |  Jane   |   1    | 38  | ... |
| 5   |  Emma   |   2    | 56  | ... |
| 6   |  Aaron  |   3    | 26  | ... |
| 7   |  Alice  |   2    | 48  | ... |
--------------------------------------

And as a result I would like to get:
-----------------------------------
| GID | UID| Name    |  Age | ... |
===================================
| 1   | 1  |  John   |  35  | ... |
| 1   | 2  |  Adam   |  22  | ... |
| 1   | 3  |  Jane   |  38  | ... |
| 2   | 1  |  Bob    |  18  | ... |
| 2   | 2  |  Emma   |  56  | ... |
| 2   | 3  |  Alice  |  48  | ... |
| 3   | 1  |  Aaron  |  26  | ... |
-----------------------------------

我希望现在会有意义。 提前致谢。

我知道如何做到这一点的唯一方法是使用变量

select
    t.id,
    t.name,
    t.group,
    t.rank as newid
from ( 
    select
        u.id,
        u.name,
        u.group,
        If(@group <> u.`Group`, @rownum := 1, @rownum := @rownum + 1) AS rank, 
        @group := u.`Group`
    from
        Users u 
            cross join (
            select
                @rownum := NULL,
                @group := 0
        ) as r 
    order by
        u.group,
        u.id
    ) as t
order by 
    t.group,
    t.id;

不能保证此方法有效,但实际上可以。

示例SQLFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM