gpt4 book ai didi

php - 在mysql中选择具有多个条件的上一条记录

转载 作者:行者123 更新时间:2023-11-29 14:30:15 25 4
gpt4 key购买 nike

这个问题很难量化,所以我第一次可能没有正确地表达这个问题。

我有一个表格,其格式与此类似:

| id | other_id | timestamp  |
| 1 | 1 | 2012-01-01 |
| 2 | 1 | 2012-01-02 |
| 3 | 2 | 2012-01-02 |

我想要做的是,给定“id”为 2 的记录以及类似的记录,其中“id”列值已知并且是唯一的,并且“other_id”已知与其对应,如何做我发现,对于每个记录,其“id”具有相同的“other_id”,但第一个“id”比我已知的要低。

例如

$arrKnownIds = array (
0 => array('id'=>2,'other_id'=>1),
1 => array('id'=>3,'other_id'=>2)
);

有了这些信息,我想运行一个查询来得到以下结果:

while($row = mysql_fetch_assoc($result)) {
$arrPreviousIds[$row['other_id']] = $row['id'];
// having in this case values of:
// $row['other_id'] = 2;
// $row['id'] = 1;
}

我不太清楚是否需要使用 UNION、多个 php 查询语句或者是否有其他方法来解决这个问题。

非常感谢任何关于如何解决这个问题的想法。

谢谢:)

编辑 - 原始查询采用以下形式:

SELECT DISTINCT(`other_id`), MAX(`id`), MAX(`timestamp`)
FROM `event`
GROUP BY `other_id`
ORDER BY `id` DESC, `other_id` ASC
LIMIT 0, 10

//这是为了获取最后 10 个独特事件并查找它们发生的时间。

//由此,我尝试查找它们之前发生的时间。

最佳答案

这个怎么样?

SELECT t1.id, (SELECT id
FROM tbl t2
WHERE t2.other_id = t1.other_id
AND t2.id < t1.id
ORDER BY t2.id DESC
LIMIT 1)
FROM tbl t1
WHERE t1.id IN (1,2,3)

如果您要处理大型结果集,有更有效的方法可以做到这一点。您能准确解释一下您将如何使用此查询吗?

更新 - 基于对现有查询的添加,这里是一个更新的查询,将两者结合起来 -

SELECT tmp.*, (SELECT `timestamp`
FROM `event`
WHERE `event`.`other_id` = `tmp`.`other_id`
AND `event`.`id` < `tmp`.`id`
ORDER BY `event`.`id` DESC
LIMIT 1) AS `prev_timestamp`
FROM (
SELECT `other_id`, MAX(`id`) AS `id`, MAX(`timestamp`) AS `timestamp`
FROM `event`
GROUP BY `other_id`
ORDER BY `id` DESC, `other_id` ASC
LIMIT 0, 10
) tmp

我还没有尝试过,但它应该会给出所需的结果。

关于php - 在mysql中选择具有多个条件的上一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10148288/

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