php - 如果一列有多个关键字,我如何从数据库中获取结果?

标签 php mysql sql

嗯,我有一个名为 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/

相关文章:

sql - 在SSIS中将固定宽度的行拆分为多行

mysql - 同时选择数据和更新

python - 如何使用python在mysql中使用rowcount

PhpStorm PDO SQL 方言

php - 修改插入更新

php - 将表单数据输入到 MySql 表中,然后直接在 PHP 中搜索该表

MySQL 新手 - 在一对多中选择所有 False

c# - 需要数据库建议->柱状,嵌入式(如果可能)

php - 传递给 Twig\Environment::getTemplateClass() 的参数 1 必须是字符串类型,给定为 null

javascript - PHP:表单防止多个选项卡。