google和stack通常能帮我找到我要去的地方,但我被困住了。我相信这是因为我没有找到合适的术语。有很多脚本都很接近,但要么我不明白结果,要么它不是我需要的。
我想我在找“匹配”或“比较”。
我的表中既有工作提供者,也有求职者,都有非常自定义的数据。好消息是,每个字段都是一个设定值(select/checkbox/radio)
以下是可用的数据,大约有17个skillset列
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 |
-------+------------+-------------+------------+------------+---------
这是接近,但我不确定,我不能让它适用于我的表
在mysql中查找最佳匹配行(innodb)
因为所有的值都是select,而不是自由文本,所以“featurecompare”方法似乎是一个方向,但我称之为匹配,因为我希望以最大/最佳顺序返回匹配
当一列不匹配或列中的匹配项少于一个时,我希望看到这个结果。
我希望以“最接近”的顺序显示这些,我认为确定“最佳/最接近”的唯一方法是匹配/真的列计数:
列之间的比较如下:
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”&“和”或“s”的组合是要做到这一点,还是需要特殊的mysql“语句/函数”呢。mysql对我来说有点复杂。
更新
因为所有的值都是(select/checkbox/radio),所以我可以将值设置为数字(manager=1,coach=2,等等),但是一个字符串示例也会很好,因为我感觉我会在另一个表中遇到它。
1条答案
按热度按时间iibxawm41#
你可能需要五张table。考虑系统中的对象:
求职者(求职者id、姓名、电子邮件地址、电话号码等)
技能(技能id,名称)
职位(职务号、姓名)
现在,如何将它们联系起来?好吧,考虑一下关系:
求职者有很多技能
一个职位有很多技能
一种技能有很多工作
一种技能有很多追求者
目前,您正在通过拥有多个列来解决这些“有很多”关系,但正如在注解中所指出的,来之不易的数据库经验告诉人们,您将很快以这种方式摆脱困境。您的sql查询将是笨拙的,如果您有大量的数据,那么它们也会很慢。
由于这种关系在两个方向上都是多对多的,所以称之为“多对多”关系。要解决这些问题,需要中间表,如下所示:
探索者技能(探索者id,技能id)
工作技能(工作id,技能id)
因此,要创建一个探索者技能,您需要将探索者的主键和技能的主键插入到
seeker_skill
table。此表不需要主键列,因为这两个外键本身就足以定义一个主键。工作技能也是如此。
这个设计建议会让你回到正确的轨道上。我没有添加任何sql,因为我认为您自己研究它会很有价值。如果您手头有一个数据库,请创建我建议的设计,并用一些测试数据填充它。然后,开始编写一个简单的查询,例如列出特定用户或工作的技能。
您还可以使用sqlfiddle或类似的工具,这样,如果您遇到了问题,您就可以用确切的测试数据来提问,并查询您遇到的问题。