【问题标题】:get date range from date of birth从出生日期获取日期范围
【发布时间】:2021-10-25 08:51:09
【问题描述】:

我正在为我的网站创建一个同行页面,我正在尝试获取一个查询,该查询可以从结构为id, name, gender, dob 的用户表中获取用户。查询应该获取与登录用户的出生日期相关的用户,即出生日期比登录用户的出生日期少 2 年或多 3 年的用户。表中的 dob 的结构类似于1993-03-23。我需要有关查询的帮助,以便它满足我的要求。这是一个基本的示例查询。

$users = $db->query(
    'SELECT users.name FROM users WHERE users.id=:id',
    array(':id'=>$userid)
);

【问题讨论】:

  • 嗨!请包括您的表结构、一些示例数据和您想要的输出。谢谢
  • @ErrBon 我刚刚编辑了它
  • 到目前为止你尝试过什么?你被困在哪里了?该查询不包含任何过滤日期的条件

标签: php mysql


【解决方案1】:

如果您知道登录用户 dob 可以使用下一个方法:

<?php
$logged_user_dob = '1993-01-01';
$query = "SELECT * 
    FROM tbl 
    WHERE dob BETWEEN DATE_SUB(:logged_user_dob, INTERVAL 2 YEAR) AND DATE_ADD(:logged_user_dob, INTERVAL 3 YEAR)";
$stmt = $pdo->prepare($query);
$stmt->execute([':logged_user_dob'=>'1993-01-01']);

$res = $stmt->fetchAll(PDO::FETCH_ASSOC);

var_export($res);

Share PHP code online

如果您只记录了用户 ID - 使用下一个查询:

<?php
$query = "SELECT tbl.* 
    FROM tbl 
    JOIN tbl AS tmp ON 
        tbl.dob BETWEEN DATE_SUB(tmp.dob, INTERVAL 2 YEAR) AND DATE_ADD(tmp.dob, INTERVAL 3 YEAR)
        AND tmp.id = :id
    WHERE tbl.id <> :id";

$stmt = $pdo->prepare($query);
$stmt->execute([':id'=>2]);

$res = $stmt->fetchAll(PDO::FETCH_ASSOC);

var_export($res);

Run & test PHP code online

【讨论】:

  • 谢谢我把它编辑到这个,$q = $db-&gt;query("SELECT name FROM users WHERE dob BETWEEN DATE_SUB(:dob, INTERVAL 2 YEAR) AND DATE_ADD(:dob, INTERVAL 3 YEAR)", array(':dob'=&gt;$dob, ':dob'=&gt;$dob))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多