搜索字符串中的记录

时间:2017-02-01 12:32:25

标签: php mysql

我有2个表,一个表是作业,另一个是警报表,其中保存了关键字.. 我想写一个查询,如果作业被发布而不是从警报表中搜索,并显示所有具有任何职位的值的记录......

Like job Title is : Web Development
Alerts tables  : 1- web,php,java
                 2- Php,Development, Jquery
                 3- Java,Jquery

查询显示警报表中的记录1和2 ...

我试过" LIKE"但它没有得到结果......

SELECT * FROM `dev_job_alerts` WHERE `jobTitle` LIKE '%Web Development%'

其中JobTitle是警报表中的列...

请提供有用的解决方案

2 个答案:

答案 0 :(得分:1)

您遇到困难的一个重要原因是您将非原子数据序列化并将其存储在表中的单个字段中。这违反了1NF,结果就是你遇到的问题。

更好的解决方案是拥有一个作业表,一个关键字表和一个用于将给定作业链接到给定关键字集的第三个表。例如,您的工作表可能是:

| job_id | job_title | job_description                      |
=============================================================
|      1 | Developer | Developer description goes here      |
|      2 | Manager   | Manager description goes here        |
|      3 | DBA       | Database Admin description goes here |
|      4 | etc       | etc                                  |

关键字表:

| keyword_id | keyword_val |
============================
|          1 | Developer   |
|          2 | Manager     |
|          3 | Programmer  |
|          4 | PHP         |
|          5 | DBM         |
|          6 | MySQL       |
|          7 | etc         |

要将作业链接到关键字,您可以使用链接表

| job_id | keyword_id |
=======================
|      1 |          1 | // Link "Developer" keyword to Developer job
|      1 |          4 | // Link "PHP" keyword to Developer job
|      1 |          6 | // Link "MySQL" keyword to Developer job
|      3 |          5 | // Link "DBA" keyword to DBA job
|      3 |          6 | // Link "MySQL" keyword to DBA job

使用这样的结构,您可以轻松获得链接到给定关键字的所有作业。

SELECT DISTINCT job.* 
FROM job
JOIN job_keyword ON job.job_id = job_keyword.job_id
JOIN keyword ON job_keyword.keyword_id = keyword.keyword_id
WHERE keyword.keyword_val = "MySQL"

您还可以通过多个关键字获得工作,获取与特定工作相关联的所有关键字等。

设置可能需要更多的工作,但从长远来看,使用链接表来建模许多关系是一个比尝试将数据序列化到字段更强大的解决方案。

答案 1 :(得分:0)

我会查看职业标题'。 SELECT * FROM' dev_job_alerts'在哪里' jobTitle'喜欢#%;%Web开发%'

' JOBTITLE'是一个字符串,而不是列名。

只需更改为: SELECT * FROM dev_job_alerts WHERE jobTitle LIKE'%Web Development%'