php – MySQL查询过滤器和匹配行上的行类似于作业匹配或功能比较
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,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,姓名,电子邮件地址,电话号码等) 现在,如何将它们链接在一起?好吧,考虑一下这些关系: >求职者有很多技能 目前,您通过拥有多个列来解决这些“有很多”关系,但正如评论中所述,来之不易的数据库经验告诉人们您很快会以这种方式解开.你的SQL查询会很尴尬,如果你有一些非常重要的数据,它们也会很慢. 由于两个方向上的关系都很多,因此这些关系被称为“多对多”关系.要解决这些问题,您需要中间表,如下所示: > seeker_skill(seeker_id,skill_id) 因此,要创建搜索者技能,请将搜索者的主键和技能的主键插入seeker_skill表.此表不需要主键列,因为两个外键足以自行定义主键. 工作技能也是如此. 这种设计建议将使您重回正轨.我没有添加任何SQL,因为我认为对您自己进行研究是有价值的.如果你有一个数据库,请创建我建议的设计,并用一些测试数据填充它.然后,开始编写一个简单的查询,例如列出特定用户或工作的技能. 您也可以使用SQL Fiddle或类似工具,这样如果您遇到问题,您可以使用确切的测试数据和查询来提问. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |