Php mysql查询选择最近15条记录加上下一年添加的所有新记录
我有一个以id为主键的mysql表 每天,我会为会员添加一条记录 我想显示从用户注册日期算起的最后15条记录+一年内新增的所有记录。用户会员资格自注册之日起一年 e、 g.如果用户1在2021年4月1日注册,他应该在4月1日之前访问15条以前的记录+下一年新添加的所有记录 及 如果user2在2021年4月20日注册,他应该可以访问从4月20日开始的最后15条以及下一年添加的记录 mysql表中将没有upload_date列 这将返回最后15条记录,但在第二天,第一条记录将不可见,第16条记录将显示Php mysql查询选择最近15条记录加上下一年添加的所有新记录,php,mysql,Php,Mysql,我有一个以id为主键的mysql表 每天,我会为会员添加一条记录 我想显示从用户注册日期算起的最后15条记录+一年内新增的所有记录。用户会员资格自注册之日起一年 e、 g.如果用户1在2021年4月1日注册,他应该在4月1日之前访问15条以前的记录+下一年新添加的所有记录 及 如果user2在2021年4月20日注册,他应该可以访问从4月20日开始的最后15条以及下一年添加的记录 mysql表中将没有upload_date列 这将返回最后15条记录,但在第二天,第一条记录将不可见,第16条记录将
但我想向用户展示他区域的最后15个。日期+下一年添加的所有记录…我不知道是否完全理解您的要求…但我来了 您应该有一个列,其中包含注册日期的注册表 假设我们有 您可以尝试以下语句:
SELECT *
FROM table
WHERE register_date BETWEEN
(DATE_SUB((SELECT register_date FROM table WHERE id = ?) INTERVAL 15 DAY))
AND
(DATE_ADD((SELECT register_date FROM table WHERE id = ?) INTERVAL 1 YEAR))
ORDER BY register_date DESC
基本上,我们从我们选择的用户那里选择注册日期,即?。
然后我们选择15天前到1年后注册的所有记录。这听起来好像数据库设计有点欠缺。然而,这并不意味着它不能做到 短期解决方案 根据你的描述,我将做出一些假设: 你有两张桌子,就像这样
user dailycontent
id id
name content
registration
第一条记录的开始日期是固定的
你每天写一篇文章:没有空白或倍数等
代码:
注意:上传将是一个日期时间字段
这毫无意义。。。桌子是什么?可能不是用户表?如果没有日期字段或某种转换/索引方法,显然不能用日期进行偏移。如果您可以提供数据库结构,这可能会更清楚……是否至少有用户的创建日期值,以及记录??这个问题不清楚。回答不清楚的问题无助于堆栈溢出,因为堆栈溢出会保留不清楚的页面,而不清楚的页面对研究人员没有帮助。请把未来的研究者放在第一位。在回答之前,与OP一起改进问题。我得到的印象是,实际上是两张表,第二张表包含某种内容?这只会选择一大堆用户?在这种情况下,他/她只需要编辑查询的前3行;在这个问题中,它说在我假设的内容表中没有上载日期,所以您不能在date1和date2之间使用,因为date字段不存在?
user dailycontent
id id
name content
registration
$startDate = "2021-01-01";
$userID = 1;
$sql = "
SELECT dailycontent.id, dailycontent.content
FROM dailycontent
JOIN user ON user.id = ?
WHERE dailycontent.id > DATEDIFF(user.registration, ?) - 15
AND dailycontent.id <= DATEDIFF(DATE_ADD(user.registration, INTERVAL 1 YEAR), user.registration) + DATEDIFF(user.registration, ?)
ORDER BY dailycontent.id ASC
";
$query = $pdo->prepare($sql);
$query->execute([$userID, $startDate, $startDate]);
user dailycontent
id id
name content
registration upload
$userID = 1;
$sql = "
SELECT dailycontent.id, dailycontent.content
FROM dailycontent
JOIN user ON user.id = 2
WHERE dailycontent.upload > DATE_SUB(user.registration, INTERVAL 15 DAY)
AND dailycontent.upload <= DATE_ADD(user.registration, INTERVAL 1 YEAR)
ORDER BY dailycontent.upload ASC
";
$query = $pdo->prepare($sql);
$query->execute([$userID]);