在我的表格中有一个名为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
答案 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以便更快地搜索。