【问题标题】:Filter MySQL comma separated field过滤 MySQL 逗号分隔字段
【发布时间】:2014-02-18 00:52:42
【问题描述】:

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

现在我需要使用给定的机构 ID 搜索表格。

Ex - 如果我给 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

【问题讨论】:

  • 你能展示你的表格结构吗?

标签: php mysql sql


【解决方案1】:

尝试使用like

and agency_ids like '%a1235%'

而不是使用IN

AND agency_ids IN ('a1234')

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

【讨论】:

  • 如果您在字段a123, a12 中有thi 并且搜索是like %a12% 它将失败,它将检索两者并且只需要检索a12
  • @gsalgadotoledo 解决此问题的一种方法是在字符串后添加逗号,即like %a12,%,以确保仅返回a12(需要在列中的最后一个值后附加逗号如果它还没有),但我认为在这种情况下使用嵌套表会更好。
  • 是的@Bhushan 我实际上可以使用这样的方法解决这个问题:agency_ids LIKE 'a1235,%' OR agency_ids LIKE '%,a1235' OR LIKE 'a1235'
【解决方案2】:

用 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

【讨论】:

    【解决方案3】:

    您当然可以使用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 以便更快地搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多