我的数据库表中有以下数据

id          activity          age_criteria
1           act1              18-25,26-39,40-59
2           act2              26-39,40-59
3           act3              40-59,60-79
4           act4              60-79
5           act5              18-25,60-79


现在我们有了搜索过滤器,只有一个文本框可以一次输入一个值

就像我正在搜索值“ 25”,而不是我希望从上表获得2条记录(ID 1,5)。需要以下结果。

id          activity          age_criteria
1           act1              18-25,26-39,40-59
5           act5              18-25,60-79


请帮助我以我正在考虑的与find_in_set以及同一查询之间的最佳方式来解决此问题吗?

最佳答案

如果一组值在特定范围内,例如FIND_IN_SET等,则可以将REPLACE18-25结合使用。

例:

select required_fields
  from activity_age_relation
 where find_in_set( '25', replace( age_criteria, '-', ',' ) ) > 0


请参阅文档:


  
  FIND_IN_SET(str,strlist)
  
  
  如果字符串str在由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是一个
  由用“,”字符分隔的子字符串组成的字符串。如果
  第一个参数是常量字符串,第二个参数是类型的列
  SET,将FIND_IN_SET()函数优化为使用位算术。
  如果str不在strlist中或strlist为空字符串,则返回0。
  如果任一参数为NULL,则返回NULL。该功能不起作用
  如果第一个参数包含逗号(“,”),则正确。

关于php - IN FIND_IN_SET之间的MySQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36932232/

10-11 04:56