Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询筛选和排序匹配上的行,类似于作业匹配或功能比较_Php_Mysql_Wordpress_Phpmyadmin - Fatal编程技术网

Php MySQL查询筛选和排序匹配上的行,类似于作业匹配或功能比较

Php MySQL查询筛选和排序匹配上的行,类似于作业匹配或功能比较,php,mysql,wordpress,phpmyadmin,Php,Mysql,Wordpress,Phpmyadmin,谷歌和Stack通常能帮我找到我要去的地方,但我被卡住了。我相信这是因为我没有寻找正确的术语。有很多脚本很接近,但要么我不理解结果,要么它不是我所需要的 我相信我在寻找匹配或比较 我的表格中既有求职者也有求职者,他们都有非常自定义的数据。好消息是,每个字段都是一个设置值select/checkbox/radio 这是可用的数据,大约有17个skillset列 type | position | skillset 1 | checkbox | skillset 3 | salary

谷歌和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  |
 -------+------------+-------------+------------+------------+---------
这是接近,但我不确定,我无法使它适用于我的表

因为所有的值都是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     |
 -------+------------+-------------+------------+------------+---------