Php 搜索mysql字段的内容

Php 搜索mysql字段的内容,php,mysql,Php,Mysql,我有一个表设置如下方式 `id` int(11) NOT NULL AUTO_INCREMENT, `eventid` int(11) NOT NULL, `invites` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) 在那个表中,我有这样的行 1, 127, '32215, 55648, 89887, 55555, 66666, 33333' 2, 168, '44444, 33333, 121212,

我有一个表设置如下方式

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `eventid` int(11) NOT NULL,
  `invites` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
在那个表中,我有这样的行

1, 127, '32215, 55648, 89887, 55555, 66666, 33333'
2, 168, '44444, 33333, 121212, 0540541'
如何搜索
invests
字段的内容以匹配特定数字,例如如果我想搜索
33333
,它将返回两行,但如果搜索
44444
,它将只返回第二行?

我相信您可以使用,例如:

select * from tablename where find_in_set('44444', invites);
不过,这不是一个很好的数据库设计。

我相信您可以使用,例如:

select * from tablename where find_in_set('44444', invites);

不过,这不是很好的数据库设计。

请允许我注意,您的数据库模式(将一组值存储在纯文本字段中)是不正确的。如果要查询这样的一对多关系,应该有另一个表来定义单个事件和单个邀请之间的关系,如下所示:

eventid invitationid
1 15
1 16
1 17
2 18
3 19
3 20

然后,您将能够执行标准的SQL查询,这些查询将实际执行并有意义。

作为旁注,请允许我注意,您的数据库模式(将一组值存储在纯文本字段中)是不正确的。如果要查询这样的一对多关系,应该有另一个表来定义单个事件和单个邀请之间的关系,如下所示:

eventid invitationid
1 15
1 16
1 17
2 18
3 19
3 20

然后,您将能够执行实际性能良好且有意义的标准SQL查询。

有哪些缺点,哪些是更好的解决方案?考虑到我在invests字段中每行可能有多达1000个diff数字,缺点是find_in_set()将非常慢,如果它必须通过文本字段解析以查找ID,更好的解决方案是只为每个eventid设置多行,并将invests设为int,每一行都是当前字段的一个值。然后将索引添加到eventid和invites(或者inviteid,如果您重命名它,我会这样做,假设它们是ID),在所述表上为特定inviteid进行简单的选择将更快地返回正确的eventid。有什么缺点和更好的解决方案?考虑到我在invests字段中每行可能有多达1000个diff数字,缺点是find_in_set()将非常慢,如果它必须通过文本字段解析以查找ID,更好的解决方案是只为每个eventid设置多行,并将invests设为int,每一行都是当前字段的一个值。然后将索引添加到eventid和invites(或者inviteid,如果您重命名它,我会这样做,假设它们是id),在所述表上为特定inviteid进行简单的选择将更快地返回正确的eventid。