过滤MySQL逗号分隔字段

3
在我的表中有一个名为agency_ids的字段。它将包含逗号分隔的字符串值,如下所示:a0001,a0002。每个记录可能包含一个或多个代理商id。
现在我需要使用给定的代理商id搜索表格。
例如 - 如果我提供a1235,它应该返回上面显示的两行。如果我提供a1234,它只应该返回带有a1234的行。
我应该怎么做?我尝试了agency_ids IN ('a1234')FIND_IN_SET,但它们都没有起作用。
完整查询 -
SELECT ov.*,c.name as company_name 
FROM (SELECT v.vacancy_id,v.company_id,v.designation,v.job_ref_number 
      FROM `t2o_vacancies` AS v  
      WHERE `opening_date` <= '2014-01-27' 
      AND `closing_date` >= '2014-01-27'
      AND posting_type= 'Agency' 
      AND agency_ids IN ('a1234') 
      ORDER BY v.opening_date DESC ) AS ov 
      LEFT JOIN t2o_companies AS c ON ov.company_id = c.id

你能展示一下你的表结构吗? - Zalaboza
3个回答

2

尝试使用like

and agency_ids like '%a1235%'

不要使用IN语句。

AND agency_ids IN ('a1234')

in可以让您指定多个值,但它不会将a1234,a1235看作两个不同的值。


如果在字段a123,a12中搜索条件为like%a12%,则会失败,因为它将检索两个条件,但只需检索a12 - gsalgadotoledo
@gsalgadotoledo 克服这个问题的一种方法是在字符串后面添加逗号,即 like %a12,%,以确保只返回 a12 _(如果列中的最后一个值没有逗号,则需要在其后追加逗号)_,但我认为在这种情况下使用嵌套表格会更好。 - Bhushan
是的@Bhushan,我实际上可以使用类似这样的东西解决问题:agency_ids LIKE 'a1235,%' OR agency_ids LIKE '%,a1235' OR LIKE 'a1235' - gsalgadotoledo

1
使用LIKE运算符而不是IN运算符怎么样?
SELECT ov.*,c.name as company_name 
FROM (SELECT v.vacancy_id,v.company_id,v.designation,v.job_ref_number 
  FROM `t2o_vacancies` AS v  
  WHERE `opening_date` <= '2014-01-27' 
  AND `closing_date` >= '2014-01-27'
  AND posting_type= 'Agency' 
  AND agency_ids LIKE '%a1234%' 
  ORDER BY v.opening_date DESC ) AS ov 
  LEFT JOIN t2o_companies AS c ON ov.company_id = c.id

0

你肯定可以使用 where agency_ids like %a1235%,但这可能不是最好的方法。

你考虑过使用关系型数据库吗?

如果你能在架构中添加另一张表,你可以这样做:

table t2o_companies
normal structure......

table t2o_vacancies
normal structure......


table t2o_companies_t2o_vacancies
id company_id vacancie_id

我不确定你当前的模式是什么,但如果你需要使用agency_id获取行,则最好使用联接表而不是只将它们保存在一个带逗号分隔符的字段中。

但如果你不想改变模式,那么别忘了为agency_ids创建索引以加快搜索速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接