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我讨厌查询,但我喜欢上面的查询,简单易行。你能解释一下规范化和更新你的答案是什么意思吗?这样其他人就会知道了。