gpt4 book ai didi

php - MySQL 查询过滤器和排序行匹配类似于工作匹配或功能比较

转载 作者:可可西里 更新时间:2023-11-01 07:38:27 24 4
gpt4 key购买 nike

Google 和 Stack 通常会带我去我要去的地方,但我被困住了。我相信这是因为我没有搜索正确的术语。有很多脚本很接近,但要么我不理解结果,要么这不是我需要的。

我相信我正在寻找“匹配”或“比较”。

我的表中既有工作提供者也有求职者,他们都有非常自定义的数据。好消息是每个字段都是一个设定值(选择/复选框/单选)

这是可用的数据,大约有 17 个技能列

 type   |  position  |  skillset 1 |  checkbox  | skillset 3 | salary
-------+------------+-------------+------------+------------+---------
Job | Sales | Talent 1 | 1,2,3 | Talent 3 | 50
Seeker1| Manager | Avail | avail | avail |
-------+------------+-------------+------------+------------+--------
Job | Sales | Talent 1 | 2 | Talent 3 | 50
Seeker2| Manager | Avail | avail | avail |
-------+------------+-------------+------------+------------+---------
Job | Sales | Talent 1 | 2,3 | Talent 3 | 60
POSTED | Manager | Needed | Needed | Needed |
-------+------------+-------------+------------+------------+---------
Job | Sales | Talent 1 | 2 | Talent 3 | 50
Seeker3| Manager | Avail | avail | NOT avail |
-------+------------+-------------+------------+------------+---------

这很接近,但我不确定,我无法将其应用于我的表格

Find best matching row in MySQL (InnoDB)

由于所有值都是选择的而不是自由文本,因此“特征比较”方法似乎是方向,但我称其为匹配,因为我想以大多数/最佳顺序返回匹配

当列不匹配或列中的匹配项少于一个时,我希望看到此结果。

我希望以“最接近”的顺序显示这些,我认为确定“最佳/最接近”的唯一方法是匹配/真实的列数?

列比较如下:

 position   = Sales manager : Match
skillset 1 = Talent1 avail : Match
checkbox = 1 of 2 needed : Match (partial)
skillset 1 = Talent3 NOT avail : NO Match
Salary = < = > : Match
Columns match = [4]

所以这个人发布了一份工作

  Job    |  Sales     |   Talent 1  |  2,3       | Talent 3   |  60
POSTED | Manager | Needed | Needed | Needed |
-------+------------+-------------+------------+------------+---------

他的比赛结果将从高到低排序:

 Seeker 1|  match    |   match     |  match (IN)|  match     | TRUE  [5]
Seeker 3| match | match | match (IN)| NO | TRUE [4]
Seeker 2| match | match | NO (none)| NO | TRUE [3]


type | position | skillset 1 | checkbox | skillset 3 | salary
-------+------------+-------------+------------+------------+---------
Job | Sales | Talent 1 | 1,2,3 | Talent 3 | 50
Seeker1| Manager | Avail | avail | avail |
-------+------------+-------------+------------+------------+--------
Job | Sales | Talent 1 | 2 | Talent 3 | 50
Seeker3| Manager | Avail | avail | NOT avail |
-------+------------+-------------+------------+------------+---------
Job | Sales | Talent 1 | 1 | Talent 3 | 50
Seeker2| Manager | Avail | avail | avail |
-------+------------+-------------+------------+------------+---------

“AND”和“OR”的组合也是如此,或者这是否需要特殊的 MySQL“语句/函数”。 MySQL 对我来说有点复杂。

更新

因为所有值都是(选择/复选框/单选)我可以将值设置为数字(Manager = 1,Coach = 2,等等)但是字符串示例也很好,因为我有一种感觉,我会跑到另一个表中。

最佳答案

您可能需要五个表。考虑系统中的对象:

  • 求职者(seeker_id、姓名、电子邮件地址、电话号码等)
  • 技能(skill_id,名称)
  • 职位(job_id,姓名)

现在,如何将它们链接在一起?好吧,考虑一下关系:

  • 求职者有很多技能
  • 一个职位有很多技能
  • 一项技能有很多工作
  • 一项技能有很多寻求者

目前,您正在通过拥有多个列来解决这些“有很多”的关系,但正如评论中所指出的,来之不易的数据库经验告诉人们您将很快摆脱这种方式。您的 SQL 查询会很笨拙,如果您有大量数据,它们也会很慢。

由于关系在两个方向上都是多对多的,因此这些关系被称为“多对多”关系。要解决这些问题,您需要像这样的中间表:

  • seeker_skill (seeker_id, skill_id)
  • job_skill (job_id, skill_id)

因此,要创建搜索者技能,请将搜索者的主键和技能的主键插入到 seeker_skill 表中。该表不需要主键列,因为两个外键足以自行定义主键。

工作技能也是如此。


此设计建议将使您重回正轨。我没有添加任何 SQL,因为我认为您自己研究它很有值(value)。如果您手头有数据库,请创建我建议的设计,并用一些测试数据填充它。然后,开始编写一个简单的查询,例如列出特定用户或工作的技能。

您还可以使用 SQL Fiddle 或类似工具,这样如果您遇到困难,您可以使用确切的测试数据和您遇到的问题提出问题。

关于php - MySQL 查询过滤器和排序行匹配类似于工作匹配或功能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com