いくつかの背景
問題のシステムには約1万件のレコードがあり、ユーザーはさまざまな検索条件の「大規模な」配列を参照または検索できます。結果は、数ページからデータベース内のすべての結果までの範囲のページ化されたテーブルに表示されます。
ユーザーが多くのフィルタリングを行い、結果が得られて任意のレコードをクリックした場合、ユーザーは新しいビュー/edit/{record_id}
に移動し、そこでそのレコードのすべての詳細を表示できます。条件は検索バーに保持されるため、いつでも最後の検索結果に戻るのは簡単ですが、次のようになります。
私が達成しようとしていること
ユーザーが検索結果に基づいて多くの変更を行う場合は、前のボタンと次のボタンを使用して、結果に戻らずに隣接するレコードにアクセスすると非常に便利です。
私はこれを基本的なレベルでid
sを使用して行うことができました
SELECT table.*, pn.p as previous_question, pn.n as next_question
from table,
(
SELECT id, lead(id) OVER w as n, lag(id) OVER w as p
FROM table
window w as (order by id $order)
) as pn
where table.id = $id
and pn.id = $id
これは明らかに、レコードがデータベースと同じ順序である最も単純な場合にのみ機能します。私が望んでいるのは、データの順序付けのすべての場合にそれらが機能することです。言うまでもなく、このデータを並べ替える方法はほぼ無限です。
私が考えていたこと
id
SQLを検索から除外し、上記のように、 sの代わりに検索条件とオフセットを使用して再度実行できるような関数/ツールを作成します。
結果内のすべてのレコードの順序のリストを$_SESSION
、データベースまたは他の場所に保存してid
から、リストをトラバースして必要なを取得します。
手元のツール
PHP、PostgreSQL、JS/jQuery。
TL; DR
ユーザーが「次へ」を何度クリックしても、検索に戻らずに次の検索結果にたどり着くことができるようにしたいと思います。
----------
任意の入力をいただければ幸いです。関連する記事へのリンク、これまたはシバン全体にアプローチする方法;)。ここではリソースは実際には問題ではありませんが、すべてのサーバーメモリや過剰なデータベースアクセスを消費せずにこれを解決できると便利です。