如何获取索引并在查询mysql中使用它
我有一张类似的桌子:如何获取索引并在查询mysql中使用它,mysql,Mysql,我有一张类似的桌子: memberID | clubIDs | clubRegistrationDates ... -------------------------------------------------------------------- 2 3,4,10,2 2010,2011,2015,2014 ... 3 2,1,5,6
memberID | clubIDs | clubRegistrationDates ...
--------------------------------------------------------------------
2 3,4,10,2 2010,2011,2015,2014 ...
3 2,1,5,6 2015,2000,2005,2010 ...
4 3,2 2014,2014 ...
一行的含义是,例如:会员2在2010注册到俱乐部3,在2011注册到俱乐部4,依此类推……因此,我想要得到的查询是获得自2014年以来成为俱乐部2会员的任何会员,因此此查询应该获得我的会员2和4。我已经有一个sql,但它没有连接到year参数,该参数是:
SELECT clubID, clubName,
(SELECT count(*) FROM members WHERE FIND_IN_SET('2',clubIDs) AND status='1' AND memberTypeID='2') AS activeNumber,
(SELECT count(*) FROM members WHERE FIND_IN_SET('2',clubIDs) AND status='0' AND memberTypeID='2') AS inactiveNumber
FROM clubs;
所以我需要从clubbids列中获取俱乐部2的索引,并将其用于clubRegistrationDates列。感谢您的帮助。请勿在一列中存储多个值。这只会给你带来像现在这样的问题。更好的桌子设计是
members table
-------------
id
name
...
clubs table
-----------
id
name
...
club_members table
------------------
club_id
member_id
registration_year
这被称为m对n关系。然后,要获得俱乐部自2014年以来id=2的所有会员,您可以
select m.id, m.name
from members m
join club_members cm on cm.member_id = m.id
where cm.club_id = 2
and cm.registration_year = 2014
如果您只有俱乐部的名称
,而没有id
,则使用
select m.id, m.name
from members m
join club_members cm on cm.member_id = m.id
join clubs c on cm.club_id = c.id
where c.name = 'Cool Club'
and cm.registration_year = 2014
我认为您应该只传递
2
(作为整数)而不是“2”
(作为字符串),并且可以将>0
放在FIND\u IN\u SET
之后。实际上,您应该真正地、真正地更改数据库设计。永远不要在一列中存储多个值。我同意@juergend,但如果系统已经构建,并且没有足够的时间进行此类重大更改,则有时是不可能更改的。一旦我经历过这样一次:(juergen d,一个人可以是20个俱乐部的成员,也可以是1个俱乐部的成员,但是没有办法知道,因此,设置20个栏也不好,而且这更具动态性。对于1个俱乐部成员,其他19个栏将为空…maksbd19,谢谢你的评论。是的,这种设计更好。我想要的查询也更容易。谢谢。