0

クエリrecordsは、指定された日付より古くないテーブルから最も古い行を選択します。records_queue指定された日付は、テーブルから取得した最後に照会された行です。クエリの目的は、古い行から新しい行にローテーションして、ユーザーごとに一度に1行を返すことです。

SELECT `records`.`record_id`, MIN(records.date_created) as date_created 
FROM (`records`) 
JOIN `records_queue` ON `records_queue`.`user_id` = `records`.`user_id` 
AND record_created > records_queue.record_date 
GROUP BY `records_queue`.`user_id`

したがって、各クエリで、から最も古い行を選択し、min(date_created)から指定された日付よりもrecords大きい次の最も古い行を返します。クエリは、最新のレコードに到達するまで行を返し続けます。その時点で同じ行が返されます。最新の行に到達した場合は、最も古い行を返します(下からやり直します-1回完全に回転します)。1つのクエリを使用してそれをどのように可能にしますか?>records_query

4

1 に答える 1

1

あなたが投稿したコードから、2つのことのうちの1つが起こっています。このクエリは、アプリケーションが独自のロジックを使用してトラバースできる完全なレコードセットを返します(これは、ページがリロードされていないか、PHPコードにパラメーターを渡していない場合は、JavaScriptのバリアントである可能性があります。ページが毎回リロードされる場合に表示するレコード)、またはアプリケーションがrecords_queue.record_date次のレコードを戻すように更新しています-投稿したクエリで単一のレコードのみをフェッチするという制限はわかりませんが。

いずれにせよ、求めている結果を達成するには、このクエリではなく、アプリケーションロジックを変更する必要があります。

records_queue.record_date編集:キューを更新するコードのセクションで、の値が最新のレコードと等しいかどうかを確認するためのクイックチェックを実行します。現在のロジックの代わりに実行された場合はupdate records_queue set record_date = (select min(theDateColumn from records)、現在の日付で更新されます。

于 2012-08-09T00:44:26.047 に答える