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

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


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

我尝试了“赞”,但没有得到结果...

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


JobTitle是警报表中的列...

请提供有用的解决方案

最佳答案

造成困难的主要原因是您要序列化非原子数据并将其存储在表的单个字段中。这违反了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"


您还可以通过多个关键字来获得工作,获取链接到特定工作的所有关键字,等等。

设置起来可能需要做更多的工作,但是从长远来看,使用链接表为多对多关系建模是比尝试将数据序列化到字段中更为有效的解决方案。

关于php - 搜索字符串中的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41979931/

10-08 20:46