Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数据库中存储和选择多个ID_Php_Mysql_Database - Fatal编程技术网

Php 在数据库中存储和选择多个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存储起来[

我有一个新闻稿组件,用户可以订阅多个新闻稿。它存储在订阅者表中,如下所示:4,8,11(这些是订阅者订阅的时事通讯的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的情况。这使您在插入、更新和删除两个表之间的关系时具有更大的灵活性和稳定性。谢谢为什么,为什么,为什么,为什么,为什么人们从来没有标准化他们的数据库为什么,为什么,为什么,为什么人们从来没有标准化他们的数据库