假设我有两个字符串,如下所示。
$ sa =“12,20,45”; $ sb =“13,20,50”;
我想检查sb中是否存在任何带有反向引用的数字,以便我可以获取这些数字并进行一些计算。
这些数字只不过是数据库中的唯一ID。所以我正在检查sa中的id是否出现在sb中的id列表中。
此外,如果可以获得所有匹配和非匹配的ID,那么这将是很好的。 为此,它不必是一个操作。多个操作都可以。(比如执行两次或更多次匹配)。
而且......如果我能得到一个mysql示例那么这可能会很好。
任何类型的答案,如果它可以帮助请发布它。 THX
答案 0 :(得分:2)
首先,这不是您想用正则表达式解决的问题。 At.all。
其次,您不应该在数据库中有一个ID列表作为值,特别是如果您需要查看它们。这是低效和糟糕的数据库设计。
如果您只需要将订阅者链接到newletters,那么这些将是您需要的表,每个实体一个表和一个用于连接的联结表。我遗漏了外键约束。
CREATE TABLE Subscribers
(subscriber_id bigint,
first_name varchar(50),
... )
CREATE TABLE Newsletter
(news_letter_id bigint,
name varchar(50),
... )
CREATE TABLE NewslettersSubscribers [or just "Subscriptions"]
(news_letter_id bigint,
subscriber_id bigint,
payment_type smallint,
...[other variables that are specific to this subscription]
)
如果您希望将订阅者放在一个组中,并且每个订阅者可以在多个组中,那么它将如下所示。
CREATE TABLE Subscribers
(subscriber_id bigint,
first_name varchar(50)
... )
CREATE TABLE Group
(group_id bigint,
group_name varchar(50),
... )
CREATE TABLE SubscribersGroups --[or just "Membership"]
(subscriber_id bigint,
group_id bigint,
payment_type smallint,
--...[other variables that are specific to this membership]
)
CREATE TABLE Newsletter
(news_letter_id bigint,
name varchar(50),
... )
CREATE TABLE NewslettersGroups --[or just "SubscriptionGroups"]
(news_letter_id bigint,
group_id bigint
--...[possibly variables that are specific to this subscription group]
)
现在你的行动相当简单。在您的示例中,我们有简报1,我们有15,16,17,20和21组以及可能的其他组。我们在NewslettersGroups中也有这些值
| news_letter_id | group_id |
| 1 | 15 |
| 1 | 16 |
| 1 | 17 |
现在你要连接简报1到20和21(只有你认为你还需要做15)。所以只需插入需要的地方(我不是100%确定这种语法是否有效,我不使用MySQL,但请参阅this reference)
INSERT INTO NewslettersGroups VALUES (1,15),(1,20), (1,21)
ON DUPLICATE KEY UPDATE;