[英]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;
不能保证此方法有效,但实际上可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.