Php 在数据库中存储和选择多个ID
我有一个新闻稿组件,用户可以订阅多个新闻稿。它存储在订阅者表中,如下所示:4,8,11(这些是订阅者订阅的时事通讯的id) 要选择我使用的时事通讯的订户,请执行以下操作:Php 在数据库中存储和选择多个ID,php,mysql,database,Php,Mysql,Database,我有一个新闻稿组件,用户可以订阅多个新闻稿。它存储在订阅者表中,如下所示:4,8,11(这些是订阅者订阅的时事通讯的id) 要选择我使用的时事通讯的订户,请执行以下操作: "SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'"; 当我想选择接收id为1的新闻稿的所有用户时,也会选择接收新闻稿11(或12、10等)的用户。这就是问题所在 是否对此有select语句?否则,我必须用括号将id存储起来[
"SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'";
当我想选择接收id为1的新闻稿的所有用户时,也会选择接收新闻稿11(或12、10等)的用户。这就是问题所在
是否对此有select语句?否则,我必须用括号将id存储起来[1]、[11]等等。您确实应该避免在一个字段中存储多个id的解决方案。相反,您应该使用外键和关系表,就像在n:m关系中一样。 n:m-关系是指a可以有多个b,反之亦然 我会这样做: 表“订户”: 没有关于时事通讯的信息 表“时事通讯”: 没有关于订阅者的信息 新表格“新闻通讯订户”:
字段:订户id
字段:时事通讯\u id
这两个字段都是外键(对另一个表的主键的引用) 要选择特定新闻稿的所有订户,可以使用以下语句:
SELECT s.* FROM subscriber s
INNER JOIN newsletter_subscriber ns ON ns.subscriber_id = s.id
WHERE ns.newsletter_id = <newsletter id>
从订阅服务器中选择s.*
内部加入时事通讯\u订户ns ON ns.subscriber\u id=s.id
其中ns.newsletter\u id=
反之亦然,要选择特定订阅者的所有新闻稿:
SELECT n.* FROM newsletter n
INNER JOIN newsletter_subscriber ns ON ns.newsletter_id = n.id
WHERE ns.subscriber_id = <subscriber id>
从时事通讯n中选择n.*
内部加入时事通讯\u订户ns ON ns.newsletter\u id=n.id
其中ns.subscriber\u id=
顺便说一句,我应该为没有回答你原来的问题而道歉。也许您了解数据库规范化的所有内容,这些ID存储在一个字段中还有其他原因吗?您确实应该避免在一个字段中存储多个ID的解决方案。相反,您应该使用外键和关系表,就像在n:m关系中一样。 n:m-关系是指a可以有多个b,反之亦然 我会这样做: 表“订户”: 没有关于时事通讯的信息 表“时事通讯”: 没有关于订阅者的信息 新表格“新闻通讯订户”:
字段:订户id
字段:时事通讯\u id
这两个字段都是外键(对另一个表的主键的引用) 要选择特定新闻稿的所有订户,可以使用以下语句:
SELECT s.* FROM subscriber s
INNER JOIN newsletter_subscriber ns ON ns.subscriber_id = s.id
WHERE ns.newsletter_id = <newsletter id>
从订阅服务器中选择s.*
内部加入时事通讯\u订户ns ON ns.subscriber\u id=s.id
其中ns.newsletter\u id=
反之亦然,要选择特定订阅者的所有新闻稿:
SELECT n.* FROM newsletter n
INNER JOIN newsletter_subscriber ns ON ns.newsletter_id = n.id
WHERE ns.subscriber_id = <subscriber id>
从时事通讯n中选择n.*
内部加入时事通讯\u订户ns ON ns.newsletter\u id=n.id
其中ns.subscriber\u id=
顺便说一句,我应该为没有回答你原来的问题而道歉。也许您了解数据库规范化的所有内容,这些ID存储在一个字段中还有其他原因吗?好的,谢谢!这意味着要为关系创建一个单独的表?@Bert-确实如此,但从长远来看,这将使事情变得更加简单。是的,这适用于所有n:m的情况。这使您在插入、更新和删除两个表之间的关系时具有更大的灵活性和稳定性。谢谢好的,谢谢!这意味着要为关系创建一个单独的表?@Bert-确实如此,但从长远来看,这将使事情变得更加简单。是的,这适用于所有n:m的情况。这使您在插入、更新和删除两个表之间的关系时具有更大的灵活性和稳定性。谢谢为什么,为什么,为什么,为什么,为什么人们从来没有标准化他们的数据库为什么,为什么,为什么,为什么人们从来没有标准化他们的数据库