首頁  >  問答  >  主體

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) ;

勉強能用,但總覺得哪裡怪怪的

代言代言2710 天前1025

全部回覆(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
  • 取消回覆