MySQL中的匹配集

时间:2012-05-05 00:12:55

标签: mysql

我正在运行类似下面的查询:

`SELECT * FROM `table` WHERE FIND_IN_SET('1',`tags`) OR FIND_IN_SET('2',`tags`)...

是否有更简单的方法来运行查询,以确定集合中的任何数字是否与另一集合中的任何数字匹配?

例如,我想做这样的事情:

`SELECT * FROM `table` WHERE MATCH_ANY_IN_SET('1,2,7,34,45',`tags`)

1 个答案:

答案 0 :(得分:1)

在字符串字段中包含“tags”的分隔列表并不是很好地使用像MySQL这样的关系数据库管理系统。

创建一个单独的表格会更加明智,我们称之为ThingTags,它将现有表格中的内容与其标记相关联:

CREATE TABLE ThingTags (
  ThingID INT NOT NULL,
  TagID   INT NOT NULL,
  FOREIGN KEY (ThingID) REFERENCES `table` (ID)
);

FOREIGN KEY约束告诉MySQL,如果ThingTags中有相应的条目(table),则记录只能存在于ThingTags.ThingID = table.ID中。

因此,每个“事物”在此表中会有多条记录:

INSERT INTO ThingTags VALUES (1,1), (1,7), (1,45), (2,1), (2,34);

您的查询将如下所示:

SELECT `table`.*
FROM   `table` JOIN `ThingTags` ON `ThingTags`.`ThingID` = `table`.`ID`
WHERE  `ThingTags`.`TagID` IN (1,2,7,34,45);