Php MySQL查询筛选和排序匹配上的行,类似于作业匹配或功能比较
谷歌和Stack通常能帮我找到我要去的地方,但我被卡住了。我相信这是因为我没有寻找正确的术语。有很多脚本很接近,但要么我不理解结果,要么它不是我所需要的 我相信我在寻找匹配或比较 我的表格中既有求职者也有求职者,他们都有非常自定义的数据。好消息是,每个字段都是一个设置值select/checkbox/radio 这是可用的数据,大约有17个skillset列Php MySQL查询筛选和排序匹配上的行,类似于作业匹配或功能比较,php,mysql,wordpress,phpmyadmin,Php,Mysql,Wordpress,Phpmyadmin,谷歌和Stack通常能帮我找到我要去的地方,但我被卡住了。我相信这是因为我没有寻找正确的术语。有很多脚本很接近,但要么我不理解结果,要么它不是我所需要的 我相信我在寻找匹配或比较 我的表格中既有求职者也有求职者,他们都有非常自定义的数据。好消息是,每个字段都是一个设置值select/checkbox/radio 这是可用的数据,大约有17个skillset列 type | position | skillset 1 | checkbox | skillset 3 | salary
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 |
-------+------------+-------------+------------+------------+---------
这是接近,但我不确定,我无法使它适用于我的表
因为所有的值都是select而不是freetext,所以功能比较方法似乎是方向,但我称之为匹配,因为我希望以most/best顺序返回匹配
当一列不匹配或列中的匹配项少于一个时,我希望看到这个结果
我希望以最接近的顺序显示这些,我认为确定最佳/最接近的唯一方法是匹配/真实?的列计数:
各列之间的比较如下:
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]
他的比赛结果将从高到低排列:
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对我来说有点复杂
使现代化
由于所有值都是select/checkbox/radio,我可以将值设置为numbers Manager=1、Coach=2等。但是字符串示例也很好,因为我觉得我会在另一个表中遇到它。您可能需要五个表。考虑系统中的对象: 求职者id、姓名、电子邮件地址、电话号码等 技能id、名称 职位职务id、姓名 现在,如何将它们联系在一起?嗯,考虑一下关系: 求职者有很多技能 一个职位有很多技能 一项技能有很多工作 一项技能有很多追求者 目前,您正在通过拥有多个列来解决这些关系,但正如评论中所指出的,来之不易的数据库经验告诉人们,您将很快以这种方式摆脱困境。您的SQL查询将非常笨拙,而且,如果您有大量的数据,它们也将非常缓慢 由于这些关系在两个方向上都有很多,因此称为多对多关系。要解决这些问题,需要中间表,如下所示: 探索者\技能探索者\ id,技能\ id 工作技能工作id,技能id 因此,要创建一个导引头技能,您需要将导引头的主键和该技能的主键插入到导引头技能表中。此表不需要主键列,因为这两个外键本身就足以定义主键 工作技能也是如此 这个设计建议会让你回到正确的轨道上。我没有添加任何SQL,因为我认为您自己研究它会很有价值。如果您手头有一个数据库,请创建我建议的设计,并用一些测试数据填充它。然后,开始编写一个简单的查询,例如列出特定用户或工作的技能
您还可以使用SQL Fiddle或类似工具,这样,如果您遇到问题,您可以询问您遇到的确切测试数据和查询。为什么您需要许多技能集列,最好为技能集创建更多的表。技能集是用户体验级别。您是否建议我将用户信息存储在单独的表中。。这似乎效率不高,你能解释一下还是我误解了谢谢你的快速回复!修复您的模式。见标准化。您将有一个单独的用户技能集表。用户id、技能id、天赋应位于不同的表中。目前,如果一个人的天赋是杂耍、烹饪、抚摸猫咪,那么在需要烹饪、抚摸猫咪、玩杂耍的工作中进行匹配将不匹配,除非你有额外的逻辑来处理重新排序。另外,跨列计数很麻烦,行计数又简单又快速。好的,很好的建议。。。我已经有一个用户表了。。。因此,我可以为他们的技能集创建单独的表,搜索匹配项,然后只为找到的匹配行留下用户信息。如果我无法确定哪一行的列最匹配,我将如何对它们进行排序??
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 |
-------+------------+-------------+------------+------------+---------