【问题标题】:(PHP) Extracting the correct birthdate when searching for age in a database(PHP) 在数据库中搜索年龄时提取正确的生日
【发布时间】:2011-02-17 23:57:49
【问题描述】:

在我的数据库中,我有一个设置了生日的字段(例如 1989.08.10 (YYYY.MM.DD))。我还有一个函数可以将此信息转换为正确的年份(例如 17、22、30 年)。在我正在制作的搜索引擎中,我从用户所需的各种输入中构建了一个查询,其中两个是年龄,MIN 和 MAX。例如,选择 18-25 岁之间的所有年龄。

我的问题是我不确定应该如何获得最终结果,因为我无法想象如何将其添加到查询中。我想我必须以某种方式制作两个 WHILE 循环,最终结果看起来像这样:

while($row = mysql_fetch_array($query){
$age = convertFunc($row['birthdate']);
while(XXXXX){
SOME CODE HERE
}
}

我对此很迷茫,但要澄清一下。在针对数据库的搜索查询中,我想要的正是与此类似的内容:SELECT * FROM users WHERE user = '$name' AND fromAge >= 18 AND toAge <= 25

这将选择所有与 MIN 和 MAX 对应的年龄的字段。

【问题讨论】:

  • 数据库中的日期是DATE还是DATETIME字段类型?

标签: php database extraction


【解决方案1】:

试试类似的东西。

select * from users where datediff(birthdate,now()) between date_add(now(),interval -15 years) and date_add(now(),interval -25 years)

【讨论】:

    【解决方案2】:

    根据您的数据库结构,您可以在 SQL 语句中使用 DATEDIFF。 Link for reference

    【讨论】:

      【解决方案3】:

      这就是为什么最好将所有日期保存为时间戳而不是实际日期,因为这样更容易找到两个数值之间的范围。

      您可以使用当前设置尝试这样的方法来查找所有 18-25 岁之间的人:

      $age1 = 18; //These two would be external inputs from whatever search form
      $age2 = 25;
      
      $date1 = date("Y.M.d",time() - ($age1 * 365 * 24 * 60 * 60));//Subtract the number of seconds equivalent to X years from current timestamp, Convert timestamps to appropriate dates for the format in the DB
      $date2 = date("Y.M.d",time() - ($age2 * 365 * 24 * 60 * 60));//Strtotime("18 years ago") might work, not sure
      
      $sql = mysql_query("SELECT * FROM `users` WHERE `birthdate` >= '$date1' AND `birthdate` <= '$date2'");
      $result = mysql_fetch_assoc($sql);
      

      【讨论】:

        猜你喜欢
        • 2013-08-16
        • 1970-01-01
        • 2015-04-15
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多