1

以下のようなクエリを実行しています。

`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`)

4

1 に答える 1

2

文字列フィールドに「タグ」の区切りリストを含めることは、MySQL のようなリレーショナル データベース管理システムをうまく利用することにはなりません。

別のテーブルを作成する方がはるかに賢明です。それを と呼びましょうThingTags。これは、既存のテーブル内のものをタグに関連付けます。

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

このFOREIGN KEY制約は、 (where )ThingTagsに対応するエントリがある場合にのみレコードが存在できることを MySQL に伝えます。tableThingTags.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);
于 2012-05-05T00:24:48.523 に答える