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

标签 php mysql database

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

要选择我使用的时事通讯的订阅者:

"SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'";

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

这个有选择语句吗?否则我必须用方括号 [1]、[11] 等来存储 id...

最佳答案

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

我会做以下事情:

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

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

新表“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>

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

SELECT n.* FROM newsletter n
INNER JOIN newsletter_subscriber ns ON ns.newsletter_id = n.id
WHERE ns.subscriber_id = <subscriber id>

顺便说一句,我应该为没有回答您最初的问题而道歉。也许您对数据库规范化了如指掌,将这些 ID 存储在一个字段中还有其他原因吗?

关于php - 在数据库中存储和选择多个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5103629/

相关文章:

php - 我怎样才能使这个 mysqli 查询在 PHP 中运行得更快?

java从数据库获取持续时间

php - Magento 类别平面数据不会重新索引错误 'There was a problem with reindexing process.'

php - 如何计算mysql数据的换行数?

mysql - 复制Mysql数据库的数据库结构

android - GetReadableDatabase错误android

sql - 在 PL/SQL 过程中,如何将表名作为参数传递?

基于对象类型的 PHP 操作最佳实践

php - 从 url 调用 PHP 函数?

php - mysql 准备了 fetch 循环,不会使用循环 stmt 连接