MySQL查询,根据具有逗号分隔值的字段搜索所有记录

MySQL查询,根据具有逗号分隔值的字段搜索所有记录,mysql,Mysql,我有两个sql表 表名:agents包含带有冒号AgentID的记录 名为:空缺的表是显示ans数据的表。 名为空缺的表有空缺。代理包含与此类似的值 VacanyID Company position CTC Candidates Agents ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FBVAC001 | HDF

我有两个sql表 表名:agents包含带有冒号AgentID的记录

名为:空缺的表是显示ans数据的表。 名为空缺的表有空缺。代理包含与此类似的值

VacanyID    Company       position        CTC        Candidates        Agents
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FBVAC001  | HDFC      |  Branch Manager | 4.5  | FBCAN001,FBCAN002| Agent3,Agent4
FBVAC003  | TBNH      |  Branch Manager | 4.5  | FBCAN004,FBCAN005| Agent2,Agent4
FBVAC005  | MMNT      |  Branch Manager | 4.5  | FBCAN008,FBCAN006| Agent3
FBVAC008  | LCFC      |  Branch Manager | 4.5  | FBCAN009,FBCAN023| Agent3,Agent4
FBVAC008  | KOTC      |  Branch Manager | 4.5  | FBCAN009,FBCAN023| Agent5,Agent4
我想运行一个查询,该查询只返回那些包含表名agents中agents.AgentID对应值的记录。这是到目前为止的查询,但所有的查询都是那些在空缺中没有超过一个值的记录

例如,如果要搜索的值是Agent3,则应返回行1、3和4,而只返回行3

SELECT
vacancies.VacancyID,
vacancies.Company,
vacancies.`Position`,
vacancies.CTC,
vacancies.Candidates,
vacancies.Agents
FROM vacancies
, agents
WHERE (FIND_IN_SET(vacancies.Agents,agents.AgentID) <> 0)
选择
VacancyID,
空缺。公司,
空缺.`职位',
A.CTC,
空缺、候选人、,
空缺,代理
空缺
,代理人
其中(在集合中查找(空缺.代理,代理.代理)0)

如何解决这个问题?

我相信您的参数在
FIND\u in\u SET
中是反向的。布景应该排在第二位

FIND_IN_SET(agents.AgentID, vacancies.Agents)
更多信息:


此外,如果您只想查看特定的代理,还需要对其进行筛选,否则您将获得代理和匹配空缺的所有可能组合(因此会出现重复行):


演示:

我将其反转并尝试了,但它只显示所有行以及每行的副本。如果您只需要
Agent3
,还需要搜索该
和AgentID='Agent3'
。请参阅我的帖子更新。那么
Agent3
来自哪里?您需要从某个地方将其作为参数传入,即使它在运行时是动态的,并且它应该进行适当的过滤。因此,例如,如果是PHP代码,并且您有一个存储代理id的变量,
$AgentID
,那么您可能会执行类似于
FIND_IN_SET(“$AgentID',dispositions.Agents)
的操作。或者在运行查询之前使用参数
并绑定参数值。agentID来自哪里?它是一个PHP变量吗?它是否存储在数据库的会话表中?您如何过滤网站中的其他区域,例如我为代理提供的信息?你可能需要和phprunner的开发者或论坛讨论,了解你是如何把这些东西联系在一起的。让它开始工作吧。在事件部分下的php runner中,我添加了一个sql Where子句
(FIND_In_SET(agents.AgentID,dispositions.agents)0)和agents.AgentID=“$”会话[“UserID]”";谢谢@mellamokbagentID不存在于空缺表中,除非其值位于空缺表的代理字段中。此外,我无法直接搜索Agent3它必须从agents.AgentID中动态获取
AND Agents.AgentID = 'Agent3'
SELECT
  vacancies.VacancyID,
  vacancies.Company,
  vacancies.`Position`,
  vacancies.CTC,
  vacancies.Candidates,
  vacancies.Agents
FROM vacancies,
  agents
WHERE (select
     agents.agentid,
     vacancies.agentid
   from agents
     left join vacancies
       on vacancies.agentid = agents.agentid)
and agents.agentid = 'Agent3'