假设我有两个像下面这样的字符串。


  $ sa =“ 12,20,45”; $ sb =“ 13,20,50”;


我想检查在sb中是否存在sa中的任何数字,并带有向后引用,以便我可以重新获得这些数字并进行一些计算。

这些数字只不过是数据库中的唯一ID。所以我正在检查sb中的id列表中是否存在sa中的id。

此外,如果可以获取所有匹配和不匹配的ID,那将是很好的。
为此,它不必是一项操作。可以执行多个操作(例如执行两次或多次匹配)。


我正在尝试做的是创建订户并将其分配到组。
我创建新闻通讯,并将其分配给各个组。
如果我尝试将新闻稿分配给同一组,则我需要该组ID,以便我可以免除该组并将该新闻稿分配给其余组。
因此,如果组15、16、17已经分配了新闻通讯,而下次我尝试分配组15、20、21时,我希望豁免15,而我希望将新闻通讯分配给20,21。


而且...如果我也可以得到一个mysql示例,那就太好了。

任何可以帮助的答案,请张贴。
谢谢

最佳答案

首先,这不是您要使用正则表达式解决的问题。全部

其次,数据库中不应该包含ID列表作为值,尤其是当您需要查询它们时。它效率低下,数据库设计不佳。

如果只需要将订户链接到通讯,则这些表就是您需要的表,每个实体一个表和一个联接表。我省去了外键约束。

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;

关于mysql - 正则表达式如何与反向引用匹配两个混合类型的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4944616/

10-10 23:42
查看更多