6

我的数据库中有一个表,其中有一个名为“标签”的字段,例如 iOS、Android、Java、JavaScript 等。我想选择此表中与某个标签匹配的所有项目,例如

编号 | 姓名 | 标签

-- | -------- | -----

1 | 名称1 | iOS,安卓

2 | 名称2 | JavaScript,CSS

3 | 名称3 | HTML,Java

现在,如果我只想要标签为“Java”的项目(只有 id=3 的项目),我会这样做:

SELECT * FROM posts WHERE tags LIKE '%Java%';

但是,正如您想象的那样,它返回了第二个(JavaScript)和第三个(Java)项目..

我该怎么做才能只返回第三个?

4

1 回答 1

15

在 MySQL 中,最好的解决方案是find_in_set()

SELECT *
FROM posts
WHERE find_in_set('Java', tags) > 0;

在 MySQL 和其他数据库中,您也可以使用 来执行此操作like,但您需要在所有内容周围放置分隔符:

SELECT *
FROM posts
WHERE concat(',', tags, ',') like '%,Java,%';

分隔可防止与类似标签混淆(嗯,不涉及逗号的混淆)。

于 2013-07-22T02:44:46.363 回答