搜索

首页  >  问答  >  正文

php - MYSQL里类似20-35这种格式的年龄段字段,如何进行范围查找?

mysql里有个字段age,里面存的是年龄段,格式类如图所示,如果是0-0则是不限

现在的需求是要根据年龄段查找,比如我要找出所有介于25-34岁之间的数据。

那么问题来了,如果where里面使用and的话,得到的结果很少很少,几乎没有,如果使用or,结果是变多了,但是很明显结果并不准确。如何才能准确的查找呢

感谢大家的回答,目前我用的办法是

SELECT age FROM jobs
WHERE ((substring_index(age,'-',1) >= 16 OR substring_index(age,'-',-1) = 0) OR (substring_index(age,'-',-1) <= 24)) AND !(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0);

勉强能用,但是总感觉哪里怪怪的

代言代言2728 天前1043

全部回复(8)我来回复

  • 怪我咯

    怪我咯2017-06-10 09:49:49

    按你说的30-55符合25-34的话,可以这样

    select * from tbl where left(age,2)<=34 and right(age,2)>=25;

    回复
    0
  • PHP中文网

    PHP中文网2017-06-10 09:49:49

    这个不好判断,30-55 符不符合你要的25-34的条件呢?还是必须要在25-34之内的?要看你的具体要求了

    回复
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-10 09:49:49

    我很好奇为什么数据表结构要这样设计 为什么不是存年龄? 如果这样设计表结构 为什么还要有取25-34岁之间的数据?你的年龄只是指定的一个区间不是一个具体数值 你应该重新去设计你的表结构 不要将错就错

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-10 09:49:49

    1、你这样存年龄段,是不是应该在另起一个key来区分年龄的跨度。
    2、截图还出现1-5,2-6,3-4这样的跨度设计,如果用户要是3该选哪个合理。

    回复
    0
  • 代言

    代言2017-06-10 09:49:49

    一大堆对mysql内置函数都没认透的人也给别人乱指导

    回复
    0
  • 为情所困

    为情所困2017-06-10 09:49:49

    问题源头,数据库设计都不合理

    回复
    0
  • 滿天的星座

    滿天的星座2017-06-10 09:49:49

    推荐你用抽象的思维反推一下:将表里age字段存的信息看作集合 A,将 where 中的条件看作集合 C,你最终的结果是要符合什么情况?

    1. 集合 A 和集合 C 有交集

    2. 集合 A 是集合 C 的子集

    3. 集合 C 是集合 C 的自己

    然后在这个基础上,你当前表结构肯定是不适合的,如果数据量不大的话,可以对数据做个离线清洗,将 age 字段拆分成 lower limit 和 upper limit,这样再做集合筛选方法就很多了。

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-10 09:49:49

    你这表结构无法实现你说的功能

    回复
    0
  • 取消回复