过滤MySQL逗号分隔字段

时间:2014-01-27 08:56:47

标签: php mysql sql

在我的表格中有一个名为agency_ids的字段。它将具有逗号分隔的字符串值,如下所示。 a0001, a0002。一个或每个代理ID可以包含每个记录。

enter image description here

现在我需要使用给定的代理商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

3 个答案:

答案 0 :(得分:2)

尝试使用like

and agency_ids like '%a1235%'

而不是使用IN

AND agency_ids IN ('a1234')

in将允许您指定多个值,但不会将a1234,a1235视为两个不同的值。

答案 1 :(得分: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

答案 2 :(得分: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获取行,那么我会有一个连接表,而不是仅仅用逗号分隔将它们保存在1个字段中。

如果你不想改变架构,那就别忘了索引agency_ids以便更快地搜索。

相关问题