0

これは定量化するのが難しいので、最初はこの質問を適切に表現していない可能性があります。

次のような形式のテーブルがあります。

| 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個の一意のイベントを取得し、それらがいつ発生したかを見つけることを目的としています。

//これから、以前に発生した時期を見つけようとします。

4

1 に答える 1

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-ここでの質問への既存のクエリの追加に基づいて、2つを組み合わせるための更新されたクエリです-

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

私はこれを試していませんが、望ましい結果が得られるはずです。

于 2012-04-13T21:22:46.293 に答える