gpt4 book ai didi

php - MySQL 中的前向后记录与主数据中的相同数据

转载 作者:行者123 更新时间:2023-11-29 01:00:51 24 4
gpt4 key购买 nike

我有一个表,首先按提醒日期排序,然后按 ID

表格看起来像:

ID | remind_date 
1 2011-01-23
2 2010-02-21
4 2011-04-04
5 2011-04-04
6 2009-05-04

我正在使用 PHP 前端来前后移动记录。我想要前进和后退按钮,但我遇到了两个相同的提醒日期的问题。

请注意,ID 没有按顺序排列,它们在这里,但在实际数据库中,按 reminder_date 排序时它们会混淆

我使用的选择语句是:($iid 是我所在的当前记录)

SELECT id FROM myDB.reminders where remind_date > (SELECT remind_date FROM myDB.reminders where id=$iid)  order by remind_date ASC LIMIT 1

那么当我到达相同的日期时会发生什么,它会跳过一个因为它要求 remind_date >。

如果我使用 remind_date >= 它返回当前记录。然后我的解决方案是使用 limit 2 并通过 PHP 检查第一条记录是否 = 我当前的 ID,如果它确实使用了下一条记录。但是它有 3 个相同的日期或 4 个等等。

我也考虑过使用 ID 字段,但由于它们顺序不对,我无法添加 ID > $iid。

有什么想法吗?除了两个相同的日期外,它工作得很好。

最佳答案

你也许可以使用这个:

SELECT ID, remind_date
FROM
(
SELECT @prev_id := -1
) AS vars
STRAIGHT_JOIN
(
SELECT
ID,
remind_date,
@prev_id AS prev_id,
@prev_id := id
FROM myDB.reminders
ORDER BY remind_date, ID
) T1
WHERE prev_id = $iid

以下是使用您评论中的测试数据对上述内容进行的测试:

CREATE TABLE Table1 (ID INT NOT NULL, remind_date DATE NOT NULL);
INSERT INTO Table1 (ID, remind_date) VALUES
(45, '2011-01-14'),
(23, '2011-01-22'),
(48, '2011-01-23'),
(25, '2011-01-23'),
(63, '2011-02-19');

SELECT ID, remind_date
FROM
(
SELECT @prev_id := -1
) AS vars
STRAIGHT_JOIN
(
SELECT
ID,
remind_date,
@prev_id AS prev_id,
@prev_id := id
FROM table1
ORDER BY remind_date, ID
) T1
WHERE prev_id = 25

结果:

ID  remind_date48  2011-01-23

关于php - MySQL 中的前向后记录与主数据中的相同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com