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

Ber*_*ert 0 php mysql database

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

要选择我使用的简报的订阅者:

"SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'";
Run Code Online (Sandbox Code Playgroud)

当我想选择接收id为1的简报的所有用户时,也会选择接收简报11(或12,10等)的用户.这就是问题所在.

这有选择陈述吗?否则我必须在它们周围存储id括号[1],[11]等...

Zee*_*mee 5

你真的应该避免在一个字段中存储多个id的解决方案.相反,您应该使用外键,就像在n:m关系中的情况一样,使用关系表.n:m关系是这样的,其中a可以有多个b,反之亦然.

我会做以下事情:

表"订户":没有关于简报的信息

表"newsletter":没有关于订阅者的信息

新表"newsletter_subscriber":
字段:subscriber_id
字段:newsletter_id
两个字段都是外键(对另一个表的主键的引用).

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

SELECT s.* FROM subscriber s
INNER JOIN newsletter_subscriber ns ON ns.subscriber_id = s.id
WHERE ns.newsletter_id = <newsletter id>
Run Code Online (Sandbox Code Playgroud)

反之亦然,选择特定订户的所有简报:

SELECT n.* FROM newsletter n
INNER JOIN newsletter_subscriber ns ON ns.newsletter_id = n.id
WHERE ns.subscriber_id = <subscriber id>
Run Code Online (Sandbox Code Playgroud)

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