首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中存储和选择多个ids

在数据库中存储和选择多个ids
EN

Stack Overflow用户
提问于 2011-02-24 18:53:51
回答 1查看 331关注 0票数 0

我有一个时事通讯组件,用户可以订阅多个时事通讯。它存储在订阅者的表中,如下所示:4、8、11(这些是订阅者订阅的时事通讯的id)

要选择我使用的新闻稿的订阅者,请执行以下操作:

代码语言:javascript
复制
"SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'";

当我想选择接收id为1的时事通讯的所有用户时,接收时事通讯11 (或12,10等)的用户。也会被选中。这就是问题所在。

对此是否有select语句?否则我必须将id用括号括起来,1,11,等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-24 18:55:28

您确实应该避免在一个字段中存储多个in的解决方案。相反,您应该使用外键和关系表,就像n:m关系的情况一样。N:m-关系是指a可以有多个b,反之亦然。

我会做以下事情:

表“订阅者”:没有时事通讯信息

表“时事通讯”:没有订阅者的信息

新表"newsletter_subscriber"

字段: subscriber_id

字段: newsletter_id

这两个字段都是外键(对另一个表的主键的引用)。

要选择特定时事通讯的所有订阅者,可以使用以下语句:

代码语言:javascript
复制
SELECT s.* FROM subscriber s
INNER JOIN newsletter_subscriber ns ON ns.subscriber_id = s.id
WHERE ns.newsletter_id = <newsletter id>

反之亦然,要选择特定订阅者的所有时事通讯:

代码语言:javascript
复制
SELECT n.* FROM newsletter n
INNER JOIN newsletter_subscriber ns ON ns.newsletter_id = n.id
WHERE ns.subscriber_id = <subscriber id>

顺便说一下,我应该向你道歉,因为我没有回答你原来的问题。也许你知道数据库规范化的一切,还有其他原因将这些ids存储在一个字段中吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5103629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档