Php 过滤器MySQL逗号分隔字段
在我的表中有一个名为agency_id的字段。它将具有逗号分隔的字符串值,如下所示。a0001,a0002。每个记录可以包含一个或多个代理ID 现在我需要使用给定的代理id搜索表 如果我给a1235,它应该返回上面显示的两行。如果我给出a1234,它应该只返回带有a1234的行 我怎么做?我在a1234中尝试了代理ID,并在集合中找到了,但没有成功 完整查询- 尝试使用like 而不是在Php 过滤器MySQL逗号分隔字段,php,mysql,sql,Php,Mysql,Sql,在我的表中有一个名为agency_id的字段。它将具有逗号分隔的字符串值,如下所示。a0001,a0002。每个记录可以包含一个或多个代理ID 现在我需要使用给定的代理id搜索表 如果我给a1235,它应该返回上面显示的两行。如果我给出a1234,它应该只返回带有a1234的行 我怎么做?我在a1234中尝试了代理ID,并在集合中找到了,但没有成功 完整查询- 尝试使用like 而不是在 in允许您指定多个值,但它不会将a1234和a1235视为两个不同的值。使用LIKE运算符而不是in如何 S
in允许您指定多个值,但它不会将a1234和a1235视为两个不同的值。使用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
您当然可以使用像%a1235%这样的where代理ID,但这可能不是最好的方法
您考虑过使用关系数据库吗
如果可以向模式中添加另一个表,则可以执行以下操作
table t2o_companies
normal structure......
table t2o_vacancies
normal structure......
table t2o_companies_t2o_vacancies
id company_id vacancie_id
我不确定您当前的模式是什么,但如果您需要使用agency_id获取行,那么我将有一个联接表,而不仅仅是用逗号分隔将它们保存在一个字段中
但是,如果您不想更改架构,那么请不要忘记为代理ID编制索引,以便进行更快的搜索。您可以显示您的表结构吗?如果您在a123字段中有该结构,则该结构将失败,a12和搜索类似于%a12%,它将同时检索这两种内容,只需检索a12@gsalgadotoledo解决此问题的一种方法是在字符串后面添加逗号,如%a12%,以确保只返回a12,如果列中的最后一个值不存在,则需要在该值后面添加逗号,但我认为在这种情况下使用嵌套表会更好。是的@Bhushan我实际上可以使用类似这样的东西解决问题:代理ID如“a1235,%”或代理ID如“%”,a1235”或类似“a1235”
AND agency_ids IN ('a1234')
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
table t2o_companies
normal structure......
table t2o_vacancies
normal structure......
table t2o_companies_t2o_vacancies
id company_id vacancie_id