这个量化很棘手,所以我第一次可能没有正确的措辞。
我有一个表格,其格式与此类似:
| 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'比我已经知道的那个。
E.g。
$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个独特事件并查找它们何时发生。
//从此,我尝试找出它们之前发生的时间。
答案 0 :(得分:1)
这个怎么样?
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)
如果要处理大型结果集,可以采用更有效的方法。你能准确解释一下你将如何使用这个查询吗?
UPDATE - 基于添加现有查询来提问这里是一个更新的查询,将两者结合起来 -
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
我没有尝试过这个但是它应该给出了理想的结果。