Php 分解MySQL字段中的数据并与字符串进行比较

Php 分解MySQL字段中的数据并与字符串进行比较,php,sql,Php,Sql,我对MySQL中的数据有问题。 我有一个列“休假期间”,我在其中保存数据,日期用逗号分隔,例如“2015年10月2日,2015年11月2日”,我想用逗号分解月份和年份。我想创造一个条件,让我可以将邮寄的月份和年份与MySQL字段中的分解数据进行比较 查询示例: SELECT * FROM ag_vacations INNER JOIN ag_employees ON ag_vacations.user_id = ag_employees.e_id where ag_vac

我对MySQL中的数据有问题。 我有一个列“休假期间”,我在其中保存数据,日期用逗号分隔,例如“2015年10月2日,2015年11月2日”,我想用逗号分解月份和年份。我想创造一个条件,让我可以将邮寄的月份和年份与MySQL字段中的分解数据进行比较

查询示例:

SELECT * 
FROM ag_vacations INNER JOIN
     ag_employees
     ON ag_vacations.user_id = ag_employees.e_id 
where ag_vacations.user_id = 1 AND 
      ag_vacations.vacation_period = 2015 AND 
      ag_vacations.vacation_period = 02
order by date_added desc

如果您只想查找行,则不需要在php中分解。您可以使用find_in_SET


虽然一系列日期并不理想,但我们有时会以这种方式接收数据。如果您需要在清理架构之前查询该字符串,并且如果您的日期格式是一致的,则可以使用
一样查询字符串。在该查询中,我们将在“ag_vacations.vacation_period”列的开始和结束处添加逗号,以确保获得月份的开始日期和年份的结束日期:

SELECT * 
FROM ag_vacations INNER JOIN
     ag_employees
     ON ag_vacations.user_id = ag_employees.e_id 
where ag_vacations.user_id = 1 AND 
      concat(ag_vacations.vacation_period,',') like '%/2015,%' AND 
      concat(',',ag_vacations.vacation_period like '%,02/%'
order by date_added desc
所以试着这样做:

SELECT * 
FROM ag_vacations INNER JOIN
     ag_employees
     ON ag_vacations.user_id = ag_employees.e_id 
where ag_vacations.user_id = 1 AND 
      ((ag_vacations.vacation_period REGEXP '[0-9]{2}\/[0-9]{2}\/2015\,[0-9]{2}\/[0-9]{2}\/[0-9]{4}' AND 
      ag_vacations.vacation_period REGEXP '02\/[0-9]{2}\/[0-9]{4}\,[0-9]{2}\/[0-9]{2}\/[0-9]{4}')
     OR (ag_vacations.vacation_period REGEXP '[0-9]{2}\/[0-9]{2}\/[0-9]{4}\,[0-9]{2}\/[0-9]{2}\/2015' AND 
      ag_vacations.vacation_period REGEXP '[0-9]{2}\/[0-9]{2}\/[0-9]{4}\,02\/[0-9]{2}\/[0-9]{4}'))
order by date_added desc
因此,如果您只需要检查该字符串中的第一个日期
2015年10月2日,2015年11月2日
-您可以删除或部分删除:

 OR (ag_vacations.vacation_period REGEXP '[0-9]{2}\/[0-9]{2}\/[0-9]{4}\,[0-9]{2}\/[0-9]{2}\/2015' AND 
          ag_vacations.vacation_period REGEXP '[0-9]{2}\/[0-9]{2}\/[0-9]{4}\,02\/[0-9]{2}\/[0-9]{4}')

在数据库中存储内爆值并尝试对其进行条件处理从来都不是一个好主意,顺便说一句,我建议将“日期”存储为MySQL中的日期或日期时间字段。您不应该使用逗号分隔的日期列表保留名为
vacation\u perdiod
的列。相反,您应该有一个单独的表,称为连接表,每个表(雇员?)和假期日期各有一行。日期应作为正确的日期而不是字符串存储在数据库中。