嗯,我有一个名为 keywords
的表,有 2 列。
1) child
2)keywords(关键词值)
我还有另一个名为contact_details
的表,其中有一列名为keyword
。在此keyword
列中,我从keywords
表插入许多keyword
。所以 2 个表看起来像这样...
关键字表:
kid keyword
1 php
1 mysql
1 html
1 css
1 css3
1 wp
1 photoshop
1 3d
contact_details 表:
cid name phone keyword
1 alex 123 php, mysql, hmtl
2 alex1 124 php, html, css3
3 alex2 125 wp, html, css
4 alex3 126 photoshop, 3d
5 alex4 127 html, 3d, php
6 alex5 128 mysql, wp, html
现在我有一个搜索框,可以使用关键字值搜索人员(姓名来自 contact_details 表)。在搜索框中,搜索值可以是几个关键词。我的意思是它可能是 php、mysql、html
或可能是 php、3d、photoshop
。
所以我的问题是:如何编写Sql 查询来获取结果?我想从 contact_details
表中获取与搜索关键字
匹配的所有姓名?
keywords
表中是否需要添加任何字段?无法获得想法:(
最佳答案
Select name from contact_details where keyword like '%<search keywords>%'
就像搜索关键字键 php 一样,您需要在查询中传递 php,并将获得所有关键字为 php' 的名称列表
Select name from contact_details where keyword like '%php%'
希望这能解决您的问题。
正确的方法, 将kid设为关键字表中的主键
Keywords table:
kid keyword
1 php
2 mysql
3 html
从 contact_details 表中删除关键字列。
contact_details table:
cid name phone
1 alex 123
2 alex1 124
3 alex2 125
再制作一张具有多对多关系的表,您需要在此处插入关系,这样就无需再次触摸关键字和 contact_details 表。
keyword_contact_mapping
kcid kid_fk cid_fk
1 1 1
2 1 2
3 1 3
4 2 1
5 2 1
6 2 2
7 2 3
Sql查询(未测试也可以使用别名)
select name from contact_details join keyword_contact_mapping on kid_fk =(select kid from Keywords where keyword='php')
关于php - 如果一列有多个关键字,我如何从数据库中获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314773/