我有一个时事通讯组件,用户可以订阅多个时事通讯。它存储在订阅者的表中,如下所示:4、8、11(这些是订阅者订阅的时事通讯的id)
要选择我使用的新闻稿的订阅者,请执行以下操作:
"SELECT * FROM #__newsl_subscribers WHERE newslids LIKE '%" . (int) $id."%'";当我想选择接收id为1的时事通讯的所有用户时,接收时事通讯11 (或12,10等)的用户。也会被选中。这就是问题所在。
对此是否有select语句?否则我必须将id用括号括起来,1,11,等等。
发布于 2011-02-24 18:55:28
您确实应该避免在一个字段中存储多个in的解决方案。相反,您应该使用外键和关系表,就像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>顺便说一下,我应该向你道歉,因为我没有回答你原来的问题。也许你知道数据库规范化的一切,还有其他原因将这些ids存储在一个字段中吗?
https://stackoverflow.com/questions/5103629
复制相似问题