MySQL查询-如何在字段中查找特定字符串

MySQL查询-如何在字段中查找特定字符串,mysql,sql,Mysql,Sql,我有一个表格“故事”,如下所示: +++++++++++++++++++++++++++++++++++++++++++ | id | keywords | +++++++++++++++++++++++++++++++++++++++++++ | 1 | romance,movie,drama | | 2 | newmovie,horor,comedy | | 3 | mo

我有一个表格“故事”,如下所示:

+++++++++++++++++++++++++++++++++++++++++++
|   id   |    keywords                    |
+++++++++++++++++++++++++++++++++++++++++++
|    1   | romance,movie,drama            |
|    2   | newmovie,horor,comedy          |
|    3   | movie,scifi                    |
|    4   | newmovie,romance,drama,asia    |
|    5   | kids,movie                           |
+++++++++++++++++++++++++++++++++++++++++++
我尝试在关键字字段中搜索“电影”,如下所示:

SELECT id FROM story WHERE keywords LIKE '%movie%'
结果是

1,2,3,4,5

但在本例中,我希望结果是
1,3,5
(带有
newmovie
的字段值不包括在内)。有人能帮我查询怎么做吗

谢谢您的帮助。

您的问题是“%movie%”可以找到“newmovie”,您只需搜索“movie”。

您的问题是“%movie%”可以找到“newmovie”,您只需搜索“movie”。

您想这样使用:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';

尽管您应该考虑规范表结构。

在这种情况下,您可以在一行中存储一个关键字,然后查询将简单地如下所示:

select id from story where keyword = 'movie';
就这样结束了。不需要重字符串函数

你可以有这样的结构:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';
然后,您可以简单地将这两个连接起来,如下所示:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';
您希望这样使用:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';

尽管您应该考虑规范表结构。

在这种情况下,您可以在一行中存储一个关键字,然后查询将简单地如下所示:

select id from story where keyword = 'movie';
就这样结束了。不需要重字符串函数

你可以有这样的结构:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';
然后,您可以简单地将这两个连接起来,如下所示:

SELECT id FROM story WHERE find_in_set('movie', keywords) > 0;
keywords(id, name);

story(story_id,. . ., keyword_id);
select s.* 
from story s
inner join keywords k on s.keyword_id = k.id
where k.name = 'movie';


“电影%”
在那里。您确实应该规范化您的数据库。^等待它。。。。。。。。。。。。。。。。。。。。。。。如果我使用'movie%'结果只返回'3',然后使用
FIND_IN_SET()
then或regex…或下面的答案。
'movie%'
在那里。您确实应该规范化您的数据库。^等待它。。。。。。。。。。。。。。。。。。。。。。。如果我使用'movie%'结果只返回'3',然后使用
FIND_IN_SET()
then或regex…或下面的答案。无结果返回无结果返回Wesome。。谢谢@古尔夫诺。您肯定不想这样做:-(@草莓你能解释一下原因吗?@Fredy-因为你应该规范化你的表。@gurv我讨厌查询,但我喜欢上面的查询,简单易行。你能解释一下规范化和更新你的答案是什么意思吗。这样其他人就知道了。太棒了..谢谢..@GurVNo。你肯定不想这样做:-(@草莓你能解释为什么吗?@Fredy-因为你应该规范化你的表。@gurv我讨厌查询,但我喜欢上面的查询,简单易行。你能解释一下规范化和更新你的答案是什么意思吗?这样其他人就会知道了。