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”和&组合也是如此. “或”要去做,或者这需要特殊的MySQL“语句/功能”. MySQL对我来说有点复杂.
更新
由于所有值都是(select / checkbox / radio),我可以将值设置为数字(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,因为我认为对您自己进行研究是有价值的.如果你有一个数据库,请创建我建议的设计,并用一些测试数据填充它.然后,开始编写一个简单的查询,例如列出特定用户或工作的技能.
您也可以使用SQL Fiddle或类似工具,这样如果您遇到问题,您可以使用确切的测试数据和查询来提问.